一、目的
消息发送成功 ==》 Publisher 的Confirm 机制
消息不丢失 和 被确认消费 ==》 主要是面向消费者的确认消费而言的
1、是否发送成功 交换机、路由和队列绑定构成的模型不存在时
1)设置发送消息成功时反馈回信息 connectionFactory.setPublisherReturns(true)。
2) 设置消息发送确认机制 rabbitTempate.SetConfirmCallback()
2、RabbitMq 服务出现宕机
在创建队列、交换机时设置其持久化参数为true 即durable 参数的取值为true
创建消息时设置消息的持久化模式为"持久化",从而保证RabbitMq服务器出现奔溃并执行重启操作之后,队列、交换机仍旧存在而且消息不会丢失。
MessageBuilder.withBody(message).setDeliveryMode(MessageDeliveryMode.PERSISTENT).build();
3、消费者在监听消费处理消息、出现监听失败或者直接奔溃 ==》导致消息所在的队列找不到对应的消息而不断的重新入队列,最终出现消息被重复消费
消息确认机制 ACK 模式 :
1)无须确认(NONE): APP应用更新通知
2)自动确认(AUTO) : 消费者监听到消息时,需要发送一个 "AUTO ACK" 的反馈信息给RabbitMQ 服务器,之后将在RabbitMQ 队列中被移除。底层实现原理是:由RabbitMq 内置的相关组件实现自动发送确认反馈信息
3)手动确认(MANUAL): 生产者将消息发送值队列,消费者在监听到消息的时需要手动的 "以代码的形式" 发送一个ACK 的反馈信息给RabbitMq服务器,之后该消息将在RabbitaMQ的队列中被移除,同时告知生产者,消息已经成功发送并且已经成功被消费者监听消费了。