ahj*_*ahj 7 amqp rabbitmq qpid
对这两个术语有点困惑,我在想具有持久消息但是瞬态(非持久)队列的目的是什么?毕竟,如果代理重新启动并且队列未恢复,则将浪费恢复的消息.
您可以拥有持久队列,但具有“致命”消息,因此在代理重新启动后,您仍然可以拥有队列,但它将是空的,反之亦然,但当您悲伤时,是的,您将丢失队列中的所有消息。
在您提供的消息持久性选项的组合中确实没有用,但不会导致错误。
但是,如果您将备用交换绑定到要向其发布消息的交换,并且它是持久的,则在重新启动后,如果您没有声明瞬态队列,则可以将消息路由到它。
例子:
假设我们有这样的组合和正确绑定的队列,Q*1接收消息M*1和Q*2- M*2。
[ Exchange-main/durable ] + [Exchange-alternate/durable]
[Qm1/transient][Qm2/transient] [Qax1/durable][Qax2/durable]
Run Code Online (Sandbox Code Playgroud)
让我们发布消息[Mt1/transient]和`[Md1/durable],我们会得到这样的情况:
[ Exchange-main/durable ] + [Exchange-alternate/durable]
[Qm1/transient][Qm2/transient] [Qax1/durable][Qax2/durable]
[Mt1/transient]
[Md1/durable]
Run Code Online (Sandbox Code Playgroud)
重启后我们会得到
[ Exchange-main/durable ] + [Exchange-alternate/durable]
[Qax1/durable][Qax2/durable]
Run Code Online (Sandbox Code Playgroud)
让我们再次发布两条消息,[Mt1/transient]以及`[Md1/durable]:
[ Exchange-main/durable ] + [Exchange-alternate/durable]
[Qax1/durable][Qax2/durable]
[Mt1/transient]
[Md1/durable]
Run Code Online (Sandbox Code Playgroud)
因此,再次重新启动代理:
[ Exchange-main/durable ] + [Exchange-alternate/durable]
[Qax1/durable][Qax2/durable]
[Md1/durable]
Run Code Online (Sandbox Code Playgroud)