rabbitmq多消費者處理
當rabbitmq擁有多個消費者時,隊列收到的消息將以輪詢(round-robin)的分發方式發送給消費者。每條消息只會發送給訂閱列表里的一個消費者。這種方式非常適合擴展,而且它是專門為並發程序設計的。如果現在負載加重,那么只需創建更多的消費者來消費處理消息即可
缺點:默認情況下,如果有n個消費者,那么rabbitmq會將第m條消息分發給第m%n(取余的方式)個消費者,rabbitmq不管消費者是否消費並已經確認(Basic.Ack)了消息。如果某些消費者任務繁重,來不及消費那么多消息,而某些其他消費者由於某些原因很快處理完了所分配到的消息,進而空閑,這樣就會造成整體應用吞吐量的下降。
解決方案:可以使用rabbitmq的channel.basicQos限制信道上消費者所能保持的最大未確認消息的數