消息队列
0、消息队列官方参考文档
MQ官方参考文档
RocketMQ 官方文档: https://rocketmq.apache.org/docs/quick-start/
RocketMQ 中国开发者中心:http://rocketmq.cloud/zh-cn/
Kafka 官方文档: http://kafka.apache.org/documentation/
RabbitMQ 官方文档: https://www.rabbitmq.com/documentation.html
1、为什么需要消息队列
(1)异步处理:
比如秒杀场景需要5个步骤:风险控制、库存锁定、生成订单、短信通知、数据统计
如果同步处理完这5个步骤再返回秒杀结果,耗时较长
使用MQ时,可以只完成风险控制、库存锁定步骤,发送MQ消息,订单服务、短信服务、数据统计服务消费该消息
好处:秒杀期间把资源用于秒杀请求,秒杀结束后再处理后续步骤
(2)流量控制:
秒杀场景,使用消息队列隔离网关和后端服务,防止后端系统被打爆
(3)服务接耦:
如电商系统中,订单服务需要讲订单数据同步到下游的支付系统、风控系统、客服系统等
如果使用接口调用,需要维护与多个下游系统的接口交互
使用MQ,订单服务只需要把订单实时数据及变更发送到消息队列,下游服务订单主题
2、如何选择消息队列
Kafka更关注的是整体的吞吐量,设计思想为批量和异步
RocketMQ的设计选择更多的是尽量及时处理请求
所以RocketMQ响应时延更低,配置合理时,可达2~3毫秒