对这两个术语有点困惑,我在想具有持久消息但是瞬态(非持久)队列的目的是什么? 毕竟,如果代理重新启动并且队列未恢复,则将浪费恢复的消息。
答案 0 :(得分:4)
你可以拥有持久的队列但是有“凡人”的消息,所以在经纪人重启之后你仍然可以有队列,但它会是空的,反之亦然,但是你很伤心,是的,你将丢失队列中的所有消息。 / p>
在你提供的组合中,消息持久性选项实际上没用,但不会导致错误。
但是如果你将alternate exchange绑定到交换,那么你就是要发布消息并且它是持久的,重新启动后,如果你没有声明临时队列,你可以将消息路由到它。
示例:
假设我们有这样的组合和正确绑定的队列,Q*1
接收消息M*1
和Q*2
- M*2
。
[ Exchange-main/durable ] + [Exchange-alternate/durable]
[Qm1/transient][Qm2/transient] [Qax1/durable][Qax2/durable]
让我们发布消息[Mt1/transient]
和`[Md1 /耐久],我们会得到这样的情况:
[ Exchange-main/durable ] + [Exchange-alternate/durable]
[Qm1/transient][Qm2/transient] [Qax1/durable][Qax2/durable]
[Mt1/transient]
[Md1/durable]
重启后我们会得到
[ Exchange-main/durable ] + [Exchange-alternate/durable]
[Qax1/durable][Qax2/durable]
让我们再次发布两条消息,[Mt1/transient]
和`[Md1 /耐用]:
[ Exchange-main/durable ] + [Exchange-alternate/durable]
[Qax1/durable][Qax2/durable]
[Mt1/transient]
[Md1/durable]
所以,再次重启经纪人:
[ Exchange-main/durable ] + [Exchange-alternate/durable]
[Qax1/durable][Qax2/durable]
[Md1/durable]