我有一個JMS客戶端,可以在接收到消息時遠程系統ssh(並在那裏做各種事情 - 與問題無關)。數百個這樣的消息可能會在短時間內到達,需要儘快處理。JMS消息重新傳遞延遲
但是,當收到消息時某些遠程系統不可用,因此它們應該推遲到稍後(例如1小時左右)。最好的解決方案是將消息放回到隊列中,設置一些「延遲」值,這將告訴JMS代理不要在一個小時內再次傳遞消息。
什麼是不好的:在接收線程中睡眠並在一小時後喚醒。由於消息消費池是有限的(例如,8個可用的連接),具有8個不可到達的系統會不必要地阻塞整個處理,這是不可接受的。
對於這樣的「延遲」值,我沒有找到消息或隊列本身的設置,它是否存在?
解決方法是使用第二個隊列將消息存儲到不可到達的系統,然後分別進行處理。但它不是一個非常優雅的解決方案,並且需要額外的編程。也許有更好的辦法。
這是一個翔實的答案,謝謝。 – egbokul 2010-08-10 06:54:41
我認爲這隻適用於JMS 1.0? (Cf Shashi的回答) – jpaugh 2016-07-18 20:33:55
是。新的MQ JMS類支持延遲交付。 – 2016-07-19 02:33:41