1. 程式人生 > 其它 >RabbitMQ持久化

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訊息確認機制