前言
消息队列是目前微服务架构中的必备组件,我们为什么需要消息队列,它能解决什么问题?
同步转异步
举一个例子,下单支付成功送积分
- 更改订单状态为支付成功
- 增加用户积分 其中第二步,我们可以通过消息队列,转为异步处理,提高响应速度。
有同学可能说转异步我另起一个线程来做第二步,不就可以了吗,这样做不是效率更高?的确效率是更高了,但是你想一个服务有N个节点,假如你的异步线程启动了,还没有来的及处理,这个节点宕机了,那是不是积分就没的加了。
流量控制
最典型的例子是秒杀。 同一时间,大量的请求涌入会对系统造成巨大的冲击,现代的消息队列大都有良好的消息堆积能力,能起到消峰的作用。
客户端 --> 网关 --> 消息队列 --> 秒杀服务
利用消息队列的堆积能力,应对瞬间涌入的流量,保护后端服务。
带来的问题
永远没有银弹,消息队列也给我带来了很多棘手的问题。
- 引入消息队列带来的延迟问题
- 增加了系统的复杂度
- 可能产生数据不一致的问题