Jms 延迟消息队列最佳实践

Jms 延迟消息队列最佳实践,jms,Jms,我正在研究一种消息队列解决方案,其中一些消息需要毫不延迟地传递,而其他消息则需要在指定的时间传递。延迟时间从几个小时到一两周不等。我可以访问JMS消息队列,但我怀疑将消息以长延迟的方式放入队列是否是一个好主意 延迟消息是一种常见的做法吗 使用QueueBrowser查看邮件并在正确的时间挑选邮件是否是一个可行的解决方案(假设邮件是其中的传递日期) 是否有其他解决方案(除了将消息放入带有时间戳的数据库中)并定期查询数据库?JMS 2.0支持消息延迟;请参阅规范第7.9节:您可以在JMSProduc

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

延迟消息是一种常见的做法吗

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


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

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


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

那么您是说将它们放在消息队列中,并告诉处理器在时间到来之前不要处理它们,或者在特定时间之前不要将它们添加到队列中?它们被添加到队列中,但是不希望在指定的时间之后处理它们。而且,延迟的消息不应该阻止其他消息的处理。这正是我想要的。不过,我想知道它是否在代理中引入了太多的状态逻辑?仅仅因为某些事情是允许的,并不意味着这是一个好主意。不过,将队列存储在带有时间戳的数据库中似乎也不是一个好的解决方案。@Thor:要么让代理处理延迟,要么自己处理。如果你的经纪人有很好的工具,那就去做吧。如果不是,那么在SQL数据库上操作也没那么糟糕,实际上:)如果您喜欢我的回复,可以将其标记为正确答案;)