RabbitMQ有两种消息确认模式:
① 消息发送确认
② 消息消费确认
首先说一下消息发送确认模式:
消息确认模式也可以细分为两种:
- 第一种publisher-confirms模式,该模式只关心消息有没有被传递到指定Exchang,而不关心消息有没有被路由到queues
- 第二种publisher-returns模式,该模式会在消息没有被路由到queues时将消息返回
下面的代码一起实现了两种模式:
① 在SpringBoot的配置文件中添加如下配置:
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.template.mandatory=true
② 实现回调接口
如上文所说,消息发送确认模式下有两种不同的子模式,如果想都启用则需要实现两个不同的回调接口:
@Component
public class CallBackSender implements RabbitTemplate.ConfirmCallback, RabbitTemplate.ReturnCallback {
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
if (ack) {
System.out.println("消息[" + correlationData.getId() + "]成功发送到指定ExChange");
} else {
System.out.println("消息[" + correlationData.getId() + "]发送到ExChange失败:" + cause);
}
}
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
System.out.println("消息未能成功路由到指定queues");
System.out.println("return--messag