![](/img/trans.png)
[英]Messages stacking on consumers, when other consumers are available in RabbitMQ - using bunny for rails
[英]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個渠道,因為它引起意外副作用的可能性較低。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.