1. 应用、对比及选型
2. rabbitmq可靠投递
- 交换机, 队列,消息持久化到mq服务器
- 生产者消息确认机制
- 消费者消息确认机制
- 死信队列
什么消息会变成死信?
- 消息被拒绝(basic.reject或basic.nack)并且requeue=false
- 消息TTL过期
- 队列达到最大长度
3. mq消息幂等
[幂等性] : 任意多次执行对资源本身所产生的影响均与一次执行的影响相同。 也就是说避免mq重复消费.
怎么做?
生产: 生成全局惟一,业务无关的消息id,msgId, 判断是否重发然后持久化.这样使用msgId做mq消息去重.
消费:
1、对于非幂等性业务且要求实现幂等性业务:生成一个唯一ID标记每一条消息,将消息处理成功和去重日志通过事物的形式写入去重表。
2、对于非幂等性业务可不实现幂等性的业务:权衡去重所花的代价决定是否需要实现幂等性,如:购物会员卡成功,向用户发送通知短信,发送一次或者多次影响不大。不做幂等性可以省掉写去重日志的操作。