我了解有 2 个选项可用:
- “非持久”
- “执着的”
但这实际上意味着什么?
“非持久性”如:如果没有消费者,AMQP 结构将尝试传递消息,消息会被丢弃吗?
“持久”如:AMQP 将重试消息,直到消费者接受它?
我了解有 2 个选项可用:
但这实际上意味着什么?
“非持久性”如:如果没有消费者,AMQP 结构将尝试传递消息,消息会被丢弃吗?
“持久”如:AMQP 将重试消息,直到消费者接受它?
传递到“持久”队列的标记为“持久”的消息将被记录到磁盘。在发生崩溃时,持久队列以及它们在崩溃之前存储的任何持久消息都会被恢复。
delivery_mode
在 AMQP 中确定消息是否将在代理重新启动后存储在磁盘上。您可以将消息标记为持久 - 通过delivery_mode property = 2
在 PHP(PECL AMQP 扩展)中发布消息时进行设置:
$exchange->publish($text, $routingKey, null, array('delivery_mode' => 2));
您还需要将队列声明为持久的(否则它将在代理停止后被丢弃)
$queue->setFlags(AMQP_DURABLE);