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

06 RabbitMQ 持久化

RabbitMQ 持久化

佇列如何實現持久化

之前我們建立的佇列都是非持久化的,rabbitmq 如果重啟的化,該佇列就會被刪除掉,如果要佇列實現持久化 需要在宣告佇列的時候把 durable 引數設定為持久化

//宣告一個佇列
boolean durable = true;//讓 Queue 進行持久化
        channel.queueDeclare(TASK_QUEUE_NAME,durable,false,false,null);

但是需要注意的就是如果之前宣告的佇列不是持久化的,需要把原先佇列先刪除,或者重新建立一個持久化的佇列,不然就會出現錯誤

這個時候即使重啟 rabbitmq 佇列也依然存在

訊息實現持久化

要想讓訊息實現持久化需要在訊息生產者修改程式碼,MessageProperties.PERSISTENT_TEXT_PLAIN 添
加這個屬性。

//設定生產者傳送訊息為 持久化訊息(要求儲存到磁碟上)
channel.basicPublish("",TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes("utf-8"));

將訊息標記為持久化並不能完全保證不會丟失訊息。儘管它告訴 RabbitMQ 將訊息儲存到磁碟,但是這裡依然存在當訊息剛準備儲存在磁碟的時候 但是還沒有儲存完,訊息還在快取的一個間隔點。此時並沒有真正寫入磁碟。永續性保證並不強,但是對於我們的簡單任務佇列而言,這已經綽綽有餘了。