这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
什么是消息队列
消息队列,指保存消息的一个容器,本质是个队列。但这个队列需要支持高吞吐,高并发,并且高可用。
消息队列常见的四个应用场景
- 系统崩溃
- 服务处理能力有限
- 链路耗时长尾
- 日志如何处理
上面四个应用场景的详细举例如下:
- 比如电商中的一个常见业务场景,用户搜索商品,点击商品,服务器会记录用户的搜索行为和点击行为,如果这个时候记录这些行为的存储服务不可用,系统将不能正常响应用户的行为,这时可以引入消息队列,将搜索行为和点击行为先发送到消息队列,再由消息队列去和存储服务交互,这样即使存储服务不可用,数据还会保存在消息队列中。
- 比如对于每次只能处理十个请求的服务器,使用消息队列对大量请求进行削峰。
- 对于链路耗时长尾,比如下面这种情况,可以使用消息队列将同步链路变成异步链路。
4. 使用消息队列处理日志,如下所示:
Log -> 消息队列 -> LogStash -> ES -> Kibana
各种消息队列的对比
ActiveMQ,早期使用的较多,没经过大规模吞吐量场景的验证,社区也不是很活跃,但是现在确实大家用的不多了,不推荐。
RabbitMQ,开发语言 erlang 阻止了大量的 Java 工程师去深入研究和掌控它,对公司而言,几乎处于不可控的状态,但是RabbitMQ是开源的,比较稳定的支持,活跃度也高如不考虑二次开发,追求性能和稳定性,推荐使用。
RocketMQ,开发语言是Java,在阿里内部经受过高并发业务的考验,稳定性和性能均不错,考虑后期可能二次开发,推荐使用。
Kafka ,大数据领域的实时计算、日志采集等场景,用 Kafka 是业内标准的,社区活跃度很高,推荐使用。大数据领域日志采集等业务推荐使用。