What is the "delivery mode" in AMQP?

我知道有两种选择:

  • "Non-persistent"
  • “坚持”

但这究竟意味着什么呢?

“非持久性”指的是: 如果没有消费者,AMQP 结构将尝试传递消息,消息将被删除?

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

67502 次浏览

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

AMQP 中的 delivery_mode确定在代理重新启动后消息是否存储在磁盘上。可以通过在发布消息时设置 delivery_mode property = 2来将消息标记为持久消息 for instance in PHP (PECL AMQP extension):

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

您还需要将队列声明为持久的(或者在代理停止后将其删除)

$queue->setFlags(AMQP_DURABLE);