2011-05-27 47 views
0

我們正在構建一個包含多個組件的應用程序,這些組件可能會通過JMS隊列向對方發送消息。在這些隊列中可能會有很多時間(由於維護等原因)出現嚴重延遲。用於檢查排隊消息是否仍然可以處理的模式

預計一些消息可能變得陳舊 - 即它們存在的環境突然改變,它們應該在下一個可用機會時被丟棄。

是否有軟件模式來實現這種「過時檢查」?有人提到了一些關於死亡蝸牛模式的問題,但我無法在Google上找到任何參考...

+0

如何在每封郵件中附加生存時間(ttl),並丟棄所有ttl已過期的郵件? – 2011-05-27 08:58:49

+0

想象一下,我們通過消息代理髮送了2000條SMS消息。 1,000經紀人1,1,000由經紀人2支付。現在經紀人2下降並在兩個小時後回來。經紀人2現在復活的1,000條消息中有三條是針對剛剛選擇不接收短信的人。這只是一種情況,另一種可能是客戶取消了操作。設置一個TTL是不夠的,但它感覺就像一個模式存在的東西。 – jmkgreen 2011-05-27 09:02:15

+0

也許這是死亡蝸牛:http://zguide.zeromq.org/page:all#Slow-Subscriber-Detection-Suicidal-Snail-Pattern – sdg 2011-06-16 18:50:23

回答

0

這裏沒有真正的模式,因爲這個概念可能太具體。

但是,您需要定義陳舊性,並在您從隊列中讀取消息時檢查它。

根據@ Space_C0wb0y對OP的評論,這可以使用一個簡單的生存時間或其他到期計時器,或者可以在該行的適當位置進行一些其他更復雜的檢查。

然而,它不能實際上作爲鏈中的一個單獨步驟將消息放回隊列中,因爲在您的情況下,延遲可能在檢查完成後發生。

所以要重申,對於這種性質的任何檢查都需要在實際的處理步驟中,在從隊列中讀取之後的最後時刻進行。