我正在研究一种消息队列解决方案,其中一些消息需要毫不延迟地传递,而其他消息需要在指定时间传递。延迟时间从几小时到一周或两周。我可以访问JMS消息队列,但是我在质疑是否将消息放入队列中是否是一个好消息。
延迟消息是一种常见做法吗?
使用QueueBrowser来查看消息并在适当的时候挑选消息成为可行的解决方案(假设消息为交付日期)?
是否有其他解决方案(除了将消息放入带有时间戳的数据库中)并定期查询数据库?
答案 0 :(得分:2)
JMS 2.0支持消息延迟;请参阅规范,第7.9节:您可以在setDeliveryDelay
上调用JMSProducer
,其中包含您希望延迟消息的毫秒数。 (注意,实际上令人困惑,你可以不在Message对象上使用setJMSDeliveryTime
方法。)在JMS 1.1中,一些JMS实现支持专有头,但效果相同。
这是一种非常常见的做法,但在实际使用中存在一个主要缺点,当延迟时间较长时:没有(标准化的)方式来访问延迟的消息:QueueBrowser
不会返回它们直到时代已经到来。如果您需要更多控制权,那么最好使用轮询数据库。