SpringBoot+RabbitMQ學習筆記(六)RabbitMQ之ACK機制


一丶簡介

RabbitMQ消息確認ACK機制

1、什么是消息確認ACK。

  答:如果在處理消息的過程中,消費者的服務器在處理消息的時候出現異常,那么可能這條正在處理的消息就沒有完成消息消費,數據就會丟失。為了確保數據不會丟失,RabbitMQ支持消息確定-ACK。

2、ACK的消息確認機制。

  答:ACK機制是消費者從RabbitMQ收到消息並處理完成后,反饋給RabbitMQ,RabbitMQ收到反饋后才將此消息從隊列中刪除。

    如果一個消費者在處理消息出現了網絡不穩定、服務器異常等現象,那么就不會有ACK反饋,RabbitMQ會認為這個消息沒有正常消費,會將消息重新放入隊列中。
    如果在集群的情況下,RabbitMQ會立即將這個消息推送給這個在線的其他消費者。這種機制保證了在消費者服務端故障的時候,不丟失任何消息和任務。
    消息永遠不會從RabbitMQ中刪除,只有當消費者正確發送ACK反饋,RabbitMQ確認收到后,消息才會從RabbitMQ服務器的數據中刪除。
    消息的ACK確認機制默認是打開的。

3、ACK機制的開發注意事項。

  答:如果忘記了ACK,那么后果很嚴重。當Consumer退出時候,Message會一直重新分發。然后RabbitMQ會占用越來越多的內容,由於RabbitMQ會長時間運行,因此這個"內存泄漏"是致命的。

那么如何防止內存泄漏發生呢?

直接上代碼。

#開啟重試
spring.rabbitmq.listener.direct.retry.enabled=true
#設置重試次數,默認為三次
spring.rabbitmq.listener.direct.retry.max-attempts=5

只需要在配置文件中加上如上配置,就可以防止Message一直從新分發而導致內存泄漏。

本來還想加上代碼,不過看到有位大佬寫的很好,就不多此一舉了,奉上鏈接:RabbitMQ的消息確認ACK機制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM