70

我了解有 2 个选项可用:

  • “非持久”
  • “执着的”

但这实际上意味着什么?

“非持久性”如:如果没有消费者,AMQP 结构将尝试传递消息,消息会被丢弃吗?

“持久”如:AMQP 将重试消息,直到消费者接受它?

4

2 回答 2

60

传递到“持久”队列的标记为“持久”的消息将被记录到磁盘。在发生崩溃时,持久队列以及它们在崩溃之前存储的任何持久消息都会被恢复。

于 2010-03-01T14:13:57.787 回答
19

delivery_mode在 AMQP 中确定消息是否将在代理重新启动后存储在磁盘上。您可以将消息标记为持久 - 通过delivery_mode property = 2在 PHP(PECL AMQP 扩展)中发布消息时进行设置:

$exchange->publish($text, $routingKey, null, array('delivery_mode' => 2));

您还需要将队列声明为持久的(否则它将在代理停止后被丢弃)

$queue->setFlags(AMQP_DURABLE);
于 2012-08-23T14:40:23.843 回答