簡體   English   中英

RabbitMQ兔子平行消費

[英]RabbitMQ Bunny Parallel Consumers

我構建了一個應用程序,該應用程序由一個發布者,幾個隊列和每個隊列的多個使用者組成。 隊列(包括隊列)上的使用者共享通道。 其他隊列使用其他通道。 我觀察到,對於不同的隊列,正在並行處理任務,但是對於特定的隊列卻沒有發生。 如果我一次將多個消息發布到特定隊列,則只有一個使用者工作,而其他使用者則等到工作結束。 為了使消費者能夠並行工作,我該怎么辦?

workers.each do |worker|
  worker.on_delivery() do |delivery_info, metadata, payload|
    perform_work(delivery_info, metadata, payload)
  end
  queue.subscribe_with(worker)
end

這就是我為特定隊列注冊所有使用者的方式。 操作perform_work(_,_,_)相當昂貴,需要幾秒鍾才能完成。

RabbitMQ脫離了channels的概念,通常希望在線程之間共享Channel。 此外,默認情況下,通道的工作線程池大小為1。 通道是會話的模擬。

在您的情況下,您有多個使用者共享隊列和通道,並在通道的事件處理程序中執行長時間的工作。

有兩種方法可以解決此問題:

  1. 為每個消費者分配一個渠道,或者
  2. 設置創建時通道的工作池大小, 請參閱此文檔

我建議每位消費者使用1個渠道,因為它引起意外副作用的可能性較低。

暫無
暫無

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

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