RabbitMQ持久化


如果我們希望即使在RabbitMQ服務重啟的情況下,也不會丟失消息,我們可以將Queue與Message都設置為可持久化的(durable),消息持久化后我們的消息會保存到我們的磁盤上,這樣可以保證絕大部分情況下我們的RabbitMQ消息不會丟失。當然還是會有一些小概率事件會導致消息丟失。


 1.消息隊列Queue的持久化

在我們創建隊列時,可進行設置

管理頁面上顯示這個D標識表示隊列持久化

但是這只是對隊列進行了持久化,並不能保證消息在RabbitMQ服務器重啟后仍然存在,所以其實還需要對消息進行持久化

2.消息Message的持久化

生產者在發布消息時對消息屬性設置為MessageProperties.PERSISTENT_TEXT_PLAIN就可以將消息進行持久化

注:紅色字段

/**
 * 生產者
 */
public class Send {
    //設定隊列名稱(已存在的隊列)
    private static final String QUEUE_NAME="queue1";

    public static void main(String[] args) throws IOException, TimeoutException {
        //從MQ工具類獲取連接信息
        Connection connection = MqConnectionUtils.getConnection();
        //創建一個通道
        Channel channel = connection.createChannel();
      //准備發送的消息內容
        String msg = "world";
     //發送消息給隊列
      /**
       * 參數1:交換機,不定義也會有默認的,因為我們的消息是通過交換機來進行投遞給隊列的,所以交換機不可能沒有
       * 參數2:簡單模式:隊列名稱
       * 參數3:消息的狀態控制
       * 參數4:消息內容
       */
        channel.basicPublish("",QUEUE_NAME,MessageProperties.PERSISTENT_TEXT_PLAIN,msg.getBytes());
        System.out.print("發送成功");
        //關閉通道
        channel.close();
        connection.close();
    }
}

但是其實將消息標記為持久化也並不能完全保證不會丟失消息。盡管它告訴RabbitMQ將消息保存到磁盤上,但這里依然會存在消息丟失的可能,這里就涉及到了RabbitMQ消息確認機制

 


免責聲明!

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



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