簡體   English   中英

在將消息發送到ActiveMQ之前先對其進行池化

[英]Pooling messages before sending them to ActiveMQ

要求是通過JMS(最有可能是ActiveMQ)從Tomcat發送網站訪問者生成的表單數據。 有兩種相互競爭的想法-一種是利用中介存儲和線程池發送到隊列(如果由於某種原因而發布到JMS失敗,則嘗試重新發送),另一種就是嘗試直接從JMS通過JMS發送有效負載。處理訪問者發布請求的線程-如果JMS發布由於某種原因失敗,則請求失敗。

第二種選擇對我來說似乎更好,因為我認為在消息隊列前面添加中間存儲是一個過大的選擇-消息隊列本身應該是中間存儲。 聽起來對嗎?

什么? 等待-MQ Broker是一個中間存儲(持久性),用於應對接收方的停機時間,該時間可以處理重發,而不能處理重發。 非少,你是正確的。 您不希望僅僅因為您的(遠程)經紀人失靈而錯過訂單。 針對該問題的一種有彈性的解決方案是設置本地(可能是嵌入式的)ActiveMQ代理,然后與遠程代理建立“代理網絡”連接。 您可以確定本地代理和您的Web應用程序都已啟動,並且如果當前恰好處於脫機狀態,它將處理向遠程代理的重新傳輸。

但是,我建議不要實現一個簡單的內存緩沖區來保存數據,直到將其發布到代理為止。

讓我們來看一個場景(我只是在構成表單的目的):

  1. 用戶A通過該表格訂購一輛自行車,然后按提交。
  2. 自行車訂單被放置在要分發的內存“池”中。
  3. 將向用戶返回一條消息,提示“感謝您的訂購,自行車將很快到貨”。
  4. MQ代理由於任何原因而關閉。
  5. 一段時間過去了
  6. Web服務器重新啟動,因為某些管理員發現需要安裝一個不錯的補丁程序。
  7. 重新啟動過程中刮掉了“交付池”中的內存,因此訂單消失了。
  8. 一周后,客戶抱怨自行車丟失,而您的銷售部門不知道他在說什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM