簡體   English   中英

隊列同步

[英]Queue synchronization

我正在使用Java rabbitmq API。 這就是我的應用程序的樣子: 在此輸入圖像描述

發布者A將作業發送到Q1 ,然后許多消費者B完成工作並創建新作業並將其發送到Q2 ,其中許多消費者C完成工作。

我想確保沒有重復的作業發送到Q2 ,我該如何實現?

請記住兩種情況:

  1. 在將工作發送到Q2但在向Q1確認他完成了工作之前B崩潰了
  2. 發送確認到Q1但在將作業發送到Q2之前B崩潰

我想確保沒有重復的作業發送到Q2,我該如何實現?

你不能。 甚至沒有在第一季度。

分布式系統的性質和CAP定理( https://en.wikipedia.org/wiki/CAP_theorem )說這是不可能的,即使目標在絕大多數時間內完成。

鑒於此,您需要做的是計划如何處理意外創建重復消息的時間。

最常見的方法是某種冪等性( https://en.wikipedia.org/wiki/Idempotence ) - 一種保證同一消息只被處理一次的方法。 或者更確切地說,可以說無限次地處理同一條消息的方式,但只會導致一次改變/對系統產生影響。


但是,一般情況下,您需要按順序處理事物的多個隊列和消費者的情況是要求“Saga”或“Process Manager” - 一個長期運行的異步工作流程。

您可以在“企業集成模式”一書中閱讀“過程管理器”這一概念,並且有很多好的庫可以為您實現詳細信息。

暫無
暫無

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

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