首页 > PHP技术 > php中级 > RabbitMQ的持久化
2020
03-30

RabbitMQ的持久化


RabbitMQ的持久化主要体现在三个方面,即交换机持久化,队列持久化及消息持久化

注意,因公司使用php-amqplib来实现RabbitMQ,故之后举例说明的代码均使用的php-amqplib,而非php的amqp扩展

1、交换机持久化

交换机的持久化其实就是相当于将交换机的属性在服务器内部保存,当MQ的服务器发生意外或关闭之后,重启RabbitMQ时不需要重新手动或执行代码去建立交换机,交换机会自动建立,相当于一直存在。

创建交换机的方法为exchange_declare($exhcange_name,$type,$passive,$durable,$auto_delete);,当$durable这个参数为true时,该交换机就会被存储到内存里,当RabbitMQ服务器重启时,会将该交换机自动重新创建,如果为false,重启后该交换机则会被从交换机队列里删掉。

v2-73fe3eb4c6d15118d9f880954bf6ae18_720w.jpg

2、队列持久化

队列持久化类似于交换机持久化,创建队列方法queue_declare中也有一个参数是$durable,也代表着RabbitMQ服务器重启时,是否自动创建队列,图中参数注释与方法中的参数(除队列名外)顺序一一对应

v2-d2bd5cf9098179436f5017631ff2c5e6_720w.jpg

3、消息持久化

众所周知,RabbitMQ的消息是依附于队列存在的,所以想要消息持久化,那么前提是队列也要持久化。

消息的持久化与交换机持久化与队列持久化有所不同,消息的持久化在于创建消息的时候,加一个持久化消息的属性,创建消息的方法是new AMQPMessage($data,$properties),其中$properties是个数组,里面可以设置对消息的各种属性,如持久化,优先级等属性。

持久化的key值为"delivery_mode",当"delivery_mode"为1时表示消息不持久化,为2时则表示消息持久化,且把消息存在磁盘里

v2-b19dad6be1d7715e0f4c1760df985d0b_720w.jpg

你也注意到了客户端的参数配置从某种程度上讲也是方便你的IDE易于搜索。

$client 对象下的所有核心方法(索引,搜索,获取等)都是可用的。

索引管理和集群管理分别在 $client->indices() 和 $client->cluster() 中。

扫码芷若 获取免费视频学习资料

编程学习

查 看2019高级编程视频教程免费获取