06 RabbitMQ 持久化
阿新 • • 發佈:2021-11-27
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 將訊息儲存到磁碟,但是這裡依然存在當訊息剛準備儲存在磁碟的時候 但是還沒有儲存完,訊息還在快取的一個間隔點。此時並沒有真正寫入磁碟。永續性保證並不強,但是對於我們的簡單任務佇列而言,這已經綽綽有餘了。