消息发送确认
发送的消息怎么样才算失败或成功?如何确认?
当消息无法路由到队列时,确认消息路由失败。消息成功路由时,当需要发送的队列都发送成功后,进行确认消息,对于持久化队列意味着写入磁盘,对于镜像队列意味着所有镜像接收成功
使用springBoot,需要在application.properties配置文件中配置:
ConfirmCallback
消息发送到 Broker 后触发回调,确认消息是否到达 Broker 服务器,通过实现 ConfirmCallback 接口,复写confirm()方法,实现自己的处理逻辑,
注意:失败的回调,并不会传回,失败的消息,仅仅只是一个表示,告诉你成功与否,可以在send消息的时候,传入CorrelationData参数(),这样回调ConfirmCallback的时候,就可以拿到message()
如果需要对失败的消息做额外的重发处理,需要做额外的操作,如:使用redis,把发送的消息,存在redis中,返回ack,则删除redis的消息,定时获取redis中的消息,做重发处理
代码如下:
ReturnCallback
通过实现 ReturnCallback 接口,启动消息失败返回(成功无返回):
在初始化RabbitAdmin或者RabbitTemplate的时候,设置回调:
发送消息:
只有设置了Mandatory,才会在失败的时候调用ReturnCallback(方法)
消费确认
首先需要在application.properties配置去下,开启手动确认模式:
具体消费代码如下:
网友评论