簡體   English   中英

RabbitMQ中具有工作隊列的請求 - 響應模式

[英]Request-response pattern with worker queues in RabbitMQ

我正在使用RabbitMQ來實現以下場景。 當用戶使用高級搜索功能時,我通過RabbitMQ向一些服務器實例之一發送消息。 它們運行相同的例程(數據庫查詢和計費)。 我想確保不會多次處理同一條消息。 我遇到過這個很棒的教程,但其中提供的交換類型是“主題”,這對我不起作用,因為我不止一次處理同一個消息。
如何在RabbitMQ中使用工作隊列實現請求 - 響應模式,以便每個消息只處理一次並且有負載平衡?

Anton Gogolev上面的評論是正確的。 由於多種原因,您無法保證郵件只會被處理一次。 但是,這通常是系統的要求 - 只產生一次所需的結果。

這樣做的方法是通過冪等性 - 無論處理給定消息多少次,它只會進行一次所需的更改。

有很多方法可以做到這一點。 一個簡單的示例是使用共享數據庫來跟蹤已處理的消息。 收到消息時,檢查是否已經處理過消息。 如果沒有,你處理它。 如果有,你只需忽略它並繼續前進。

在您的情況下,如果您正在執行請求/響應並希望進行負載平衡,則可能需要同一隊列中的多個使用者。 您可以讓2或10或300個請求處理程序實例偵聽同一個隊列,並且您不必擔心重復處理。

RabbitMQ將向單個消費者發送給定消息。 它將等待該消費者說它已完成處理,或者如果消費者崩潰或拒絕該消息,它將重新排隊該消息以供另一個消費者再次嘗試。

通過這種方式,每個請求通常只有一個請求處理程序。 但是,不止一個人總是可以處理相同的信息,這就是冪等性很重要的原因。

關於主題交換與任何其他類型交換的使用 - 它沒有太大區別。 始終可能有多個隊列接收您要發送的消息,因為您可以使用相同的綁定密鑰將多個隊列綁定到同一個交換機。

暫無
暫無

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

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