1. 应用、对比及选型

2. rabbitmq可靠投递

  • 交换机, 队列,消息持久化到mq服务器
  • 生产者消息确认机制
  • 消费者消息确认机制
  • 死信队列

什么消息会变成死信?

  1. 消息被拒绝(basic.reject或basic.nack)并且requeue=false
  2. 消息TTL过期
  3. 队列达到最大长度

3. mq消息幂等

[幂等性] : 任意多次执行对资源本身所产生的影响均与一次执行的影响相同。 也就是说避免mq重复消费.

怎么做?
生产: 生成全局惟一,业务无关的消息id,msgId, 判断是否重发然后持久化.这样使用msgId做mq消息去重.
消费:
1、对于非幂等性业务且要求实现幂等性业务:生成一个唯一ID标记每一条消息,将消息处理成功和去重日志通过事物的形式写入去重表。
2、对于非幂等性业务可不实现幂等性的业务:权衡去重所花的代价决定是否需要实现幂等性,如:购物会员卡成功,向用户发送通知短信,发送一次或者多次影响不大。不做幂等性可以省掉写去重日志的操作。