消息队列优势:异步,削峰,解耦
缺点:增加系统复杂性,系统可用性降低,需要保证Mq的高可用。
工作模式
- 工作队列模式
多个消费者竞争消费同一个消息队列
消息丢失
- 生产者发向Mq丢失消息。解决方案:确认机制,当Mq成功接收到生产者的消息时,会发送给生产者一个确认消息,异步监听。confirm机制
- 消息在Mq中丢失。持久化交换机,队列,消息。确保服务器重启时依然能从磁盘恢复对应的交换机,队列和消息
- 如果消费者成功收到消息,设置自动回复。Mq会删除消息,此时如果消费者端出现错误宕机等,那么无法重新发送消息,导致消息丢失。解决方案:手动回复确认消息,只有当消费者端解决好之后才会发送确认消息。
此时mq再删除消息。
有序消费
多笔订单是可以并行消费的,但是同一笔订单的消息如创建,付款,完成等需要按照顺序消费才有意义。
1、工作队列模式。多个队列抢占消息
- 根据生产者id对队列数取余,就可以让那个相同id的所有操作压到同一个队列里面。
2、单个队列,多线程处理消息 - 根据生产者id对内存队列数取余,每个线程对应一个内存队列。
重复消费
- set(key,val);利用redis的单线程模型,如果已经存在,则不能消费
分布式事务,保证最终不同数据库的一致性?