我們將訊息持久化後,假如消費端出現異常,rabbitmq伺服器會將訊息快取到記憶體,當生產者傳送一直傳送訊息而消費者都沒有正常消費時訊息就會將這些訊息全部儲存在記憶體,當我們的訊息過多時,就可能導致rabbitmq伺服器記憶體洩漏,
解決辦法:1.開啟ack確認機制,2.消費端設定重試機制(預設是三次)
開啟之後生產者客戶端沒有收到訊息ack反饋就會認為該訊息沒有被消費,就會儲存到記憶體,但是設定重試機制後,消費端消費了設定的重試次數之後,假如還沒有收到ack反饋,就會將快取在記憶體中的訊息移除,這樣就可以防止記憶體溢位
消費端具體配置**:
spring.rabbitmq.host=192.168.70.131
spring.rabbitmq.port=5672
spring.rabbitmq.username=oldlu
spring.rabbitmq.password=123456
#設定交換器的名稱
mq.config.exchange=log.direct
#info佇列名稱
mq.config.queue.info=log.info
#info路由鍵
mq.config.queue.info.routing.key=log.info.routing.key
#error佇列名稱
mq.config.queue.error=log.error
#error路由鍵
mq.config.queue.error.routing.key=log.error.routing.key
#開啟重試
spring.rabbitmq.listener.retry.enabled=true
#重試次數,預設為3次
spring.rabbitmq.listener.retry.max-attempts=5
RabbitMQ實戰 訊息確認機制之訊息的正確消費
上節中我們講了如何確保訊息的準確發布,今天我們來看看如何確保訊息的正確消費。在之前的基礎上我們對消費者 倉庫服務 進行完善。所以,首先我們將ack的方式設定為手動 spring rabbitmq host xx port 5672 username x password x listener dir...
rabbitmq訊息重新入隊和訊息確認
為了確認訊息不會丟失,rabbitmq支援message acknowledgments。乙個ack的響應會從消費端返回,告訴rabbitmq乙個特定的訊息已被接收。當rabbitmq空閒時會處理它,將它刪除。如果乙個消費者掛掉 channel被關閉 connection被關閉或者tcp 連線被關閉...
rabbitmq訊息手動確認訊息操作說明
bean public messagerecoverer messagerecoverer rabbittemplate rabbittemplate public class rejectanddontrequeuerecoverer implements messagerecoverer thr...