消息的拒绝

消息的拒绝

Reject  Nack

  消息确认可以让 RabbitMQ知道消费者已经接受并处理完消息。但是如果消息本身或者消息的处理过程出现问题怎么办?需要一种机制,通知RabbitMQ,这个消息,我无法处理,请让别的消费者处理。这里就有两种机制,Reject和 Nack。

  Reject在拒绝消息时,可以使用 requeue标识,告诉 RabbitMQ 是否需要重新发送给别的消费者。不重新发送,一般这个消息就会被 RabbitMQ丢弃。Reject一次只能拒绝一条消息。

  Nack则可以一次性拒绝多个消息。这是 RabbitMQ对 AMQP规范的一个扩展。

    

  通过 RejectRequeuConsumer可以看到当 requeue参数设置为 true时,消息发生了重新投递。

死信交换器 DLX

  RabbitMQ对 AMQP规范的一个扩展。被投递消息被拒绝后的一个可选行为,往往用在对问题消息的诊断上。

 

  消息变成死信一般是以下几种情况:

  • ·消息被拒绝,并且设置 requeue 参数为 false
  • ·消息过期
  • ·队列达到最大长度

  死信交换器仍然只是一个普通的交换器,创建时并没有特别要求和操作。在创建队列的时候,声明该交换器将用作保存被拒绝的消息即可,相关的参数是 x-dead-letter-exchange。

 

  

和备用交换器的区别

  1、备用交换器是主交换器无法路由消息,那么消息将被路由到这个新的备用交换器,而死信交换器则是接收过期或者被拒绝的消息。

  2、备用交换器是在声明主交换器时发生联系,而死信交换器则声明队列时发生联系。

原文地址:https://www.cnblogs.com/Soy-technology/p/11570224.html