0
我有8個消費者在一個隊列中,他們中的任何一個都可以接收消息,並且一旦處理完畢,就會影響數據庫。大多數消息可以異步運行,但是在一些消息上,我們需要停止消耗隊列,直到消息被其中一個消費者完全處理。在此期間,其他7位消費者不應該在隊列中消耗。使用Rabbitmq實現阻塞消息(或在發佈者和消費者之間進行確認)
有沒有辦法在rabbitmq中實現這一點,而不是做一個應用程序級解決方案(這可能很難實現)?
我有8個消費者在一個隊列中,他們中的任何一個都可以接收消息,並且一旦處理完畢,就會影響數據庫。大多數消息可以異步運行,但是在一些消息上,我們需要停止消耗隊列,直到消息被其中一個消費者完全處理。在此期間,其他7位消費者不應該在隊列中消耗。使用Rabbitmq實現阻塞消息(或在發佈者和消費者之間進行確認)
有沒有辦法在rabbitmq中實現這一點,而不是做一個應用程序級解決方案(這可能很難實現)?
我不知道嚴格的RabbitMQ更改,使其工作。但是,這裏的方法不需要修改任何舊代碼,除了重命名生產者正在放置消息的隊列。它確實需要編寫一個新的消費者:
由於單個消費者只是轉發異步消息,所以它可以快速完成並且不應該存在吞吐量問題。
當您收到同步消息時,是否需要停止處理所有消息,或者只是連續處理所有同步消息? – lreeder
@lreeder當一個同步(阻塞)消息進入時,我們需要停止獲取它後面的所有消息(因爲必須假設阻塞消息對db/cache進行了更改來處理它們),這很容易消費者,而不是8個消費者,沒有rabbitmq的幫助,我們無法控制其他7個消費者 –