延迟消息队列最佳实践

Tho*_*hor 5 jms

我正在研究一种消息队列解决方案,其中一些消息需要立即传递,而其他消息需要在指定时间传递。延迟时间从几小时到一两周不等。我可以访问 JMS 消息队列,但我怀疑将消息放入具有长延迟的队列是否是一个好主意。

延迟消息是常见做法吗?

使用 QueueBrowser 查看消息并在正确的时间挑选消息是否是一个可行的解决方案(假设消息是其中的传递日期)?

是否有其他解决方案(除了将带有时间戳的消息放入数据库之外)并定期查询数据库?

rü-*_*rü- 2

JMS 2.0支持消息延迟;请参阅规范第 7.9 节:您可以调用setDeliveryDelay并指定JMSProducer您希望消息延迟的毫秒数。(请注意,尽管令人困惑,但您不能Message 对象上使用该setJMSDeliveryTime方法。)在 JMS 1.1 中,某些 JMS 实现支持专有标头以达到相同的效果。

这是一种很常见的做法,但在实际使用中,当延迟较长时,它有一个主要缺点:没有(标准化)方法来访问延迟的消息:QueueBrowser直到时间到来才返回它们。如果您需要更多控制,最好轮询数据库。