文章目录
本文作者:夏日。
1 消息队列有什么用 ?
- 异步处理:将用户请求中的耗时操作,通过消息队列实现异步处理。将对应的消息发送到消息队列之后就立即返回结果,减少响应时间,提升用户体验。
- 削峰/限流:先将短时间高并发产生的事务消息存储在消息队列中,然后后端服务再慢慢根据自己的能力去消费这些消息,这样就避免直接把后端服务打垮掉。
- 降低系统耦合性:生产者发送消息到消息队列中去,需要消费的系统直接去消息队列取消息进行消费即可而不需要和其他系统有耦合。
- 延迟任务:大部分消息队列都支持延时消息,例如30分钟后取消未支付订单。
2 使用消息队列会带来哪些问题
- 系统可用性降低: 系统可用性在某种程度上降低,在加入 MQ 之前,你不用考虑消息丢失或者说 MQ 挂掉等等的情况,但是,引入 MQ 之后就需要去考虑了!
- 系统复杂性提高: 加入 MQ 之后,需要保证消息没有被重复消费、处理消息丢失的情况、保证消息传递的顺序性等等问题。
- 一致性问题: 消息队列带来的异步可以提高系统响应速度。但是,万一消息的真正消费者并没有正确消费消息就会导致数据不一致的情况。
3 如何保证 RabbitMQ 消息的顺序性?🔥
- 拆分多个消息队列,每个消息队列对应一个消费者。这样消息队列会多一些,可以在消费者内部采用多线程的方式进行消费;
- 或者就一个消息队列对应一个消费者,然后这个消费者内部用内存队列做排队,然后分发给底层不同的 worker (某个线程)来处理。这里消费者并不直接消费消息,而是将消息根据关键值(比如:订单 id)进行哈希,哈希值相同的消息保存到了相同的内存队列里。每个内存队列有且只有一个对应的 worker。也

最低0.47元/天 解锁文章
1096

被折叠的 条评论
为什么被折叠?



