文章目录
一、配置文件中启用确认机制
- 在
application.yml
或application.properties
文件中开启publish confirm
和publish return
:publish confirm
有三个模式:null
:关闭(默认)。simple
:同步阻塞模式。correlated
:异步模式。
publish return
默认为false
,需要显式设置为true
。
二、编写 returnCallback
和 confirmCallback
-
returnCallback
的实现:- 创建一个配置类
MqConfig
,通过构造函数注入RabbitTemplate
。 - 使用
@PostConstruct
注解初始化函数,在容器加载完成后给RabbitTemplate
添加ReturnCallback
。 ReturnCallback
是一个接口,处理返回的消息。可以使用 Lambda 表达式简化代码:
- 创建一个配置类
-
confirmCallback
的实现:- 在发送消息时指定
confirmCallback
,需要为每次发送的消息创建CorrelationData
,并指定消息 ID 和回调。 - 通过
ListenableFutureCallback
异步处理确认结果:
- 在发送消息时指定
三、消息确认测试
- 测试发送成功的情况:
- 确保发送的消息成功投递并返回
ack
,测试时确保日志级别设置为DEBUG
,以便查看确认信息。
- 确保发送的消息成功投递并返回
- 测试发送失败的情况:
- 测试路由失败的场景,如
routingKey
错误,RabbitMQ 会通过returnCallback
返回失败信息,并记录replyCode
和replyText
。
- 测试路由失败的场景,如
- 测试
nack
返回:- 在发送消息时,若交换机配置错误或消息未成功持久化,RabbitMQ 会返回
nack
,需要记录失败原因并考虑重试机制。
- 在发送消息时,若交换机配置错误或消息未成功持久化,RabbitMQ 会返回
四、性能注意事项
- 发送者确认机制由于需要与 RabbitMQ 进行双向通信,会显著影响消息发送的性能。大多数情况下,消息发送出现异常的概率较低,因此通常不建议启用此机制,除非确有需求。
- 若启用确认机制,需要设置合理的重试次数,避免无限重试造成性能下降。
总结
- 发送者确认机制由
publish confirm
和publish return
两部分组成,能够提高消息发送的可靠性。 returnCallback
和confirmCallback
用来处理消息发送失败的情况,提供消息投递失败的原因。- 该机制虽能提高可靠性,但会影响系统性能,因此要谨慎使用,并合理设置重试机制。