我正在研究一种消息队列解决方案,其中一些消息需要无延迟地传递,而其他消息则需要在指定的时间传递。延迟时间从几小时到一两周不等。我可以访问JMS消息队列,但是我在质疑将消息长时间拖到队列中是否是个好主意。
延迟消息是一种惯例吗?
使用QueueBrowser窥视消息并在适当的时间挑选消息是可行的解决方案(假设消息是其中的传递日期)?
还有其他解决方案(除了将消息放入带有时间戳的数据库之外并定期查询数据库吗?
JMS 2.0支持消息延迟;请参阅规格,第7.9节:您可以使用希望消息延迟的毫秒数来调用setDeliveryDelay
上的JMSProducer
。 (请注意,令人困惑的是,您可以not在Message对象上使用setJMSDeliveryTime
方法。)在JMS 1.1中,某些JMS实现支持专有标头以达到相同的效果。
这是很普遍的做法,但是在延迟时间较长时,它在实际使用中存在一个主要缺点:没有(标准化的)方法可以访问延迟的消息:QueueBrowser
直到它们到达时才返回它们。如果您需要更多控制权,那么最好轮询数据库。
我已经为您的确切用例构建了API:调度队列消息。在您的情况下,您可以调用我们提供的任意时间的延迟“ schedule()” API,该延迟将在延迟的时间发布到您的队列中。
发出您的第一条消息需要5分钟,我们有API可以访问预定的消息,以及取消或编辑它们。我在这里有一个原型:
如果您仍在寻找解决方案,请告诉我。我已经在工作时建立了一个计划程序以大规模发送电子邮件,因此我在类似的用例方面也有经验。