amqp / rabbitmq中的立即标志和强制标志有什么区别?

时间:2018-04-13 14:26:29

标签: rabbitmq amqp reliable-message-delivery

我指的是rabbitmq AMQP-0.9 documentation用于basic_publish方法。 它引用了消息的两个标志: - 1)立即,2)强制性。

  

强制

     

该标志告诉服务器如果消息不能如何反应   路由到队列。如果设置了此标志,服务器将返回一个   带有Return方法的unroutable消息。如果此标志为零,则   服务器默默地丢弃消息。

     

服务器应该实现强制标志。

立即: -

  

即时

     

如果消息无法立即路由到队列使用者,则此标志告诉服务器如何做出反应。如果设置了此标志,则   服务器将使用Return方法返回无法传递的消息。如果   此标志为零,服务器将对消息进行排队,但是没有   保证它会被消耗掉。

The server SHOULD implement the immediate flag.

两个标志之间有什么区别,因为两个标志看起来都一样? 而且,从rabbitmq服务器的角度来看,未传递和未传递的消息有什么区别?

1 个答案:

答案 0 :(得分:2)

根据您提供的文档摘录:

<强>强制: 发送到交换的消息没有与目标的匹配绑定(主要是队列,您需要进一步检查在交换之间绑定的情况下会发生什么)将返回给发布者,因此发布者将知道代理无法路由消息

<强>即时: 此处更进一步,如果消息中没有可用的消费者,则会通知发布者。

因此,例如,如果您向可以将其指向队列的交换机发送消息,但队列中当前没有消费者:

  • 从强制性的角度来看一切正常(你的消息已被路由到队列。它不会“丢失”
  • 从直接的角度来看,这是不行的,因为在发布时没有消费者的消息。