【RabbitMQ】RabbitMQ的公平轉發和持久化
阿新 • • 發佈:2018-12-29
問題:公平轉發
目前訊息轉發機制是平均分配,這樣就會出現倆個消費者,奇數的任務很耗時,偶數的任何工作量很小,造成的原因就是近當訊息到達佇列進行轉發訊息。並不在乎有多少任務消費者並未傳遞一個應答給RabbitMQ。僅僅盲目轉發所有的奇數給一個消費者,偶數給另一個消費者。
為了解決這樣的問題,我們可以使用basicQos方法,傳遞引數為prefetchCount= 1。這樣告訴RabbitMQ不要在同一時間給一個消費者超過一條訊息。
換句話說,只有在消費者空閒的時候會發送下一條資訊。
排程分發訊息的方式,也就是告訴RabbitMQ每次只給消費者處理一條訊息,也就是等待消費者處理完畢並自己對剛剛處理的訊息進行確認之後,才傳送下一條訊息,防止消費者太過於忙碌,也防止它太過去清閒。
intprefetchCount = 1; channel.basicQos(prefetchCount); |
問題:持久化:
訊息持久化在訊息宣告和通道釋出的時候來宣告他為持久化,同時在消費端宣告的時候也需要宣告為持久化。
沒有持久化,重新啟動RabbitMQ,發現沒有了。
持久化之後,重新啟動RabbitMQ,發現是有的,執行消費者,可以獲取該訊息。
|
程式碼是 從world中貼上過來的,格式有點不好,請諒解!