消息丢失
1、只要订单完成我们就会发送一条消息给MQ,这个途中突然MQ服务器网络中断,导致消息无法抵达
做好容错方法需要在消息发送前加上异常处理
try { rabbitTemplate.convertAndSend("order-event-exchange", "order.release.other", orderTo); } catch (Exception e) { //将没法送成功的消息进行重试发送 } 复制代码
还可以将消息存入数据库,把失败的消息定期重新再发一遍
2、当消息发送给MQ,通过Brock通过交换机抵达队列,MQ关机了,只有抵达队列才能实现消息持久化
这时候需要使用生产者的确认机制
只要消息收到了会自动持久化,如果进入另一个回调方法说明报错了,需要修改数据库使消息重发
3、自动ACK的状态下。消费者收到消息,但没来得及消息然后宕机
一定开启手动ACK,消费成功才移除,失败或者没来得及处理就noAck并重新入队
消息重复#
1、消息消费成功,事务已经提交,ack时,机器宕机。导致没有ack成功,Broker的消息重新由unack变为ready,并发送给其他消费者