1 概念
RabbitMQ 默认是不持久化 Exchange、Queue、Message ,这意味着一旦消息服务器重启,所有已声明的 Exchange、Queue、Message 都会丢失。可以通过以下例子所示设置持久化:
$connect = new AMQPStreamConnection('127.0.0.1', 5672, 'admin', 'admin2021');
$channel = $connect->channel();
# 持久化 Exchange:在声明时,将第4个参数 $durable 设置为 True
$channel->exchange_declare('exchange_name', AMQPExchangeType::DIRECT, false, True, false);
# 持久化 Queue:在声明时,将第3个参数 $durable 设置为 True
$channel->queue_declare('queue_name', false, True, false, false);
# 持久化 Message:在创建消息对象时,将 delivery_mode 设置为 AMQPMessage::DELIVERY_MODE_PERSISTENT 或者 2。(1-不持久)
$msg = new AMQPMessage('Hello World!', ['delivery_mode' => AMQPMessage:: DELIVERY_MODE_PERSISTENT]);
如果只有 Exchange 和 Queue 持久化,那么在队列中的 Message 也不会持久化,只有这3个全部设置完成后,才能保证服务器重启不会对现有的队列造成影响。这里需要注意的是,只有 Exchange 和 Queues 的 durable 同为 ture 时才能绑定,否则在绑定时,RabbitMQ 都会抛错。
如果文章有帮到你的话,别忘了点赞收藏噢 :smile: