AMQP中的"交付模式"是什么?

jld*_*ont 52 amqp

我知道有两种选择:

  • "非持久"
  • "老大难"

但这究竟意味着什么呢?

"非持久性"如下:如果没有消费者,AMQP结构将尝试传递消息,消息将被删除?

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

小智 41

标记为"持久"的邮件将传递到"持久"队列,将记录到磁盘.在发生崩溃时恢复持久队列,以及在崩溃之前存储的任何持久消息.

  • "持久性"仅表示Exchange或队列将在服务器重新启动后继续存在.这并不意味着存储在持久队列中的消息将存活...这将_also_需要消息级别属性`.deliveryMode = 2`.(我刚试过这些案例) (4认同)

Grz*_*tyl 15

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

$exchange->publish($text, $routingKey, null, array('delivery_mode' => 2));
Run Code Online (Sandbox Code Playgroud)

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

$queue->setFlags(AMQP_DURABLE);
Run Code Online (Sandbox Code Playgroud)