我了解有两个选项:
"非持久化"是指:如果没有消费者,AMQP Fabric将尝试传递消息,否则消息将被丢弃。
"持久化"是指:如果没有消费者接受消息,AMQP将重试传递该消息。
- "非持久化"
- "持久化"
"非持久化"是指:如果没有消费者,AMQP Fabric将尝试传递消息,否则消息将被丢弃。
"持久化"是指:如果没有消费者接受消息,AMQP将重试传递该消息。
标记为“持久性”的消息,如果发送到“持久性”队列,将被记录在磁盘上。 在崩溃事件中,可以恢复“持久性”队列以及崩溃前存储的任何持久性消息。
delivery_mode
是 AMQP 中的一个选项,用于决定经纪人重启后是否将消息存储在磁盘上。您可以通过设置 delivery_mode 属性为 2
来将消息标记为持久化,以便在发布消息时保留其状态。
$exchange->publish($text, $routingKey, null, array('delivery_mode' => 2));
你还需要将队列声明为持久化的(否则在代理停止后它将被删除)
$queue->setFlags(AMQP_DURABLE);
传递模式的值将告诉RabbitMQ,当消息放置在队列中时,它是否被允许在内存中保留消息(非持久化),还是必须先将消息存储在磁盘上(持久化)。