2017-03-07 112 views
1

使用activeMQ作爲媒介在模塊之間進行數據通信。讓生產者P,訂戶S1 S2從P讀取。使用隊列作爲數據集以循環方式分派數據。 S1,S2正在按預期接收數據。擁有S1,S2是爲了實現故障安全和負載平衡。 ACK在數據處理後發送,以確保我們不會錯過任何來自P的數據。訂閱者隊列的多實例| ActiveMQ

觀察到一個場景,其中S1處於關閉狀態且讀取了一些數據並且沒有完全處理(所以沒有發送ACK然而)。我期待ActiveMQ重新發送(未確認)的數據到S2。當然,數據在重新啓動時被分派到S1。但時間框架也很重要。

幫我理解實現這個機制。感謝幫助。

+0

看看這裏http://stackoverflow.com/questions/42470534/multithreaded-jms-client-activemq/42472281#42472281 –

+0

@HassenBennour-不知道預取設置如何在這種情況下幫助? –

回答

1

...其中S1是下來...我期待的ActiveMQ要重新發送(未ACK'ed)數據S2

,這是沒有發生?當你說S1停機時,你的意思是它實際上是關閉的,還是你的意思是它只是無法處理任何消息,因爲它掛了?

在後一種情況下,您看到的行爲是通過設計的 - 只要S1仍然連接,代理不會在S1的預取緩衝區中釋放消息(至少在消息到期超時命中之前)。

在前一種情況下,S1的隊列連接保持活動超時將會被觸發(在可配置時間之後),並且S1預取中的所有消息都應該回滾到代理並使其可供S2處理。

+0

這是後一種情況,懸掛。得到了我的答案。謝謝。 – srikanth

+0

@srikanth - 請評論你的實際解決方案,以幫助他人解決同樣的問題。謝謝! –