2014-05-16 123 views
2

我正在研究消息隊列解決方案,其中一些消息需要立即傳遞,並且其他消息需要在指定的時間交付。延遲時間從幾小時到一週或兩週。我有權訪問JMS消息Queue,但我在質疑將消息放在隊列中是否有長時間延遲是個好主意。延遲消息隊列最佳實踐

延誤訊息是一種常見做法嗎?

是否使用QueueBrowser來查看消息並在恰當的時間挑選消息一個可行的解決方案(假設消息作爲交付日期)?

是否有另一種解決方案(除了將數據庫中的消息與時間戳),並定期查詢數據庫?

+0

所以,你說你把它們放在消息隊列中,並告訴處理器不要在時間到之前處理它們,或者直到特定時間纔將它們添加到隊列中? – Taugenichts

+0

它們被添加到隊列中,但不希望它們在稍後某個指定時間之前處理。 – Thor

+0

此外,延遲的消息不應該阻止其他消息被處理。 – Thor

回答

2

JMS 2.0支持消息延遲;請參閱規範第7.9節:您可以在JMSProducer上調用setDeliveryDelay,延遲的時間以毫秒爲單位。 (請注意,儘管如此,您可以使用而不是在Message對象上使用setJMSDeliveryTime方法。)在JMS 1.1中,某些JMS實現支持專用標頭以獲得相同的效果。

這是一種非常普遍的做法,但它在實際使用中有一個主要缺點,那就是延遲時間更長:沒有(標準化)方法來訪問延遲的消息:QueueBrowser直到他們的時間到來纔會返回。如果你需要更多的控制,你最好輪詢一個數據庫。

+0

正是我在找的東西。但是,我想知道它是否向經紀人引入了太多的狀態邏輯?只是因爲某些東西是被允許的,並不意味着它是一個好主意。但是,將隊列存儲在帶時間戳的數據庫中似乎也不是一個好的解決方案。 – Thor

+0

@Thor:你可以讓經紀人處理延遲,或者你自己動手。如果你的經紀人有*真的*好的工具,那就去做吧。如果沒有,在SQL數據庫上操作並不是那麼糟糕,實際上是:) 如果你喜歡我的回覆,可以將它標記爲正確答案;) –