消息发送确认
生产者发送消息,是先发送消息到Exchange,然后Exchange再路由到Queue。这中间就需要确认两个事情,第一,消息是否成功发送到Exchange;第二,消息是否正确的通过Exchange路由到Queue。
spring提供了两个回调函数来处理这两种消息发送确认。
ConfirmCallback和ReturnCallback
-
实现ConfirmCallback并重写confirm(CorrelationData correlationData, boolean ack, String cause)回调方法,可以确认消息是否发送到Exchange。
-
实现ReturnCallback并重写returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey)回调方法,可以确认消息从EXchange路由到Queue失败。注意:这里的回调是一个失败回调,只有消息从Exchange路由到Queue失败才会回调这个方法。
-
注意,若需要以上两个回调函数生效,需要添加配置
配置文件: -
-
# 开启发送确认
spring.rabbitmq.publisher-confirms=true
# 开启发送失败退回
spring.rabbitmq.publisher-returns=true
#指定消息在没有被队列接收时是否强行退回还是直接丢弃
spring.rabbitmq.template.mandatory=true
mandatory的作用:
当mandatory标志位设置为true时,如果exchange根据自身类型和消息routingKey无法找到一个合适的queue存储消息,那么broker会调用basic.return方法将消息返还给生产者;当mandatory设置为false时,出现上述情况broker会直接将消息丢弃;通俗的讲,mandatory标志告诉broker代理服务器至少将消息route到一个队列中,否则就将消息return给发送者;
来源:oschina
链接:https://my.oschina.net/xiaominmin/blog/4490426