一.如何实现消息可靠性
1.发送到MQ失败,重试策略
2.生产者确认机制Confirm机制每个消息都有自己的一个Confirm机制消息正确到达交换机,返回ack。
未到达交换机,返回nack。
Return机制消息未正确到达队列,此时会通过Publisher Confirm返回ack,会通过Publisher Return回调方法返回异常信息。
全局只有一个失败后把消息写入数据库表,后期通过定时任务扫描,再次发送。如果定时任务发送多次依旧失败,则人工介入可以通过封装好的RabbitClient实现消息发送,有失败落库方案
3.消息持久化(交换机、队列默认就是持久化的
4.消费者确认机制ack:成功处理消息,RabbitMQ从队列中删除该消息nack:消息处理失败,RabbitMQ需要再次投递消息reject:消息处理失败并拒绝该消息,RabbitMQ从队列中删除该消息
二、消息幂等性保证(在程序开发中,是指同一个业务,执行一次或多次对业务状态的影响是一致的)
1.幂等性操作天生幂等根据ID删除查询不幂等新增修改
2.方案唯一消息ID每一条消息都生成一个唯一的id,与消息一起投递给消费者。
消费者接收到消息后处理自己的业务,业务处理成功后将消息ID保存到数据库或Redis如果下次又收到相同消息,去数据库或Redis查询判断是否存在,存在则为重复消息放弃处理业务状态


轻绘梨花泪沾衣
1 声望1 粉丝

« 上一篇
redis