RabbitMQ的持久化主要體現在三個方面,即交換機持久化,隊列持久化及消息持久化
注意,因公司使用php-amqplib來實現RabbitMQ,故之后舉例說明的代碼均使用的php-amqplib,而非php的amqp擴展
1、交換機持久化
交換機的持久化其實就是相當於將交換機的屬性在服務器內部保存,當MQ的服務器發生意外或關閉之后,重啟RabbitMQ時不需要重新手動或執行代碼去建立交換機,交換機會自動建立,相當於一直存在。
創建交換機的方法為exchange_declare($exhcange_name,$type,$passive,$durable,$auto_delete);,當$durable這個參數為true時,該交換機就會被存儲到內存里,當RabbitMQ服務器重啟時,會將該交換機自動重新創建,如果為false,重啟后該交換機則會被從交換機隊列里刪掉。
2、隊列持久化
隊列持久化類似於交換機持久化,創建隊列方法queue_declare中也有一個參數是$durable,也代表着RabbitMQ服務器重啟時,是否自動創建隊列,圖中參數注釋與方法中的參數(除隊列名外)順序一一對應
3、消息持久化
眾所周知,RabbitMQ的消息是依附於隊列存在的,所以想要消息持久化,那么前提是隊列也要持久化。
消息的持久化與交換機持久化與隊列持久化有所不同,消息的持久化在於創建消息的時候,加一個持久化消息的屬性,創建消息的方法是new AMQPMessage($data,$properties),其中$properties是個數組,里面可以設置對消息的各種屬性,如持久化,優先級等屬性。持久化的key值為"delivery_mode",當"delivery_mode"為1時表示消息不持久化,為2時則表示消息持久化,且把消息存在磁盤里