消息队列使用
2021-07-12 本文已影响0人
无玄
消息队列介绍
消息队列主要是为了就解决生产者和消费者之间的通信问题,生产者先将消息投递一个叫做「队列」的容器中,而消费者不断的从容器中取出消息,并进行消费。
消息队列适用场景
- 解耦
将消息写入消息队列,需要消息的系统自己从消息队列中订阅,信息生产者和消费者之间不需要直接的交互。 - 异步
将消息写入消息队列,非必要的业务逻辑以异步的方式运行,加快响应速度。 - 广播
将消息写入消息队列,所有的消费者都直接直接订阅,进行各自的消费动作,之间互不影响。 - 削峰
消费者可以按照服务并发能力,从消息队列中慢慢拉取消息进行消费,避免了短暂的峰值导致的系统承压过大。
消息队列选型
常用的消息队列:ActiveMQ、RocketMQ、RabbitMQ、Kafka
特性 | RabbitMQ | RocketMQ | kafka |
---|---|---|---|
开发语言 | erlang | java | scala+java |
单机吞吐量 | 万级 | 10万级 | 10万级 |
时效性 | us级 | ms级 | ms级以内 |
可用性 | 高(主从) | 非常高(分布式) | 非常高(分布式) |
消费模式 | Pull+Push | Pull+Push | Pull |
消息可靠性 | 基本不丢 | 经过参数优化配置,可以做到0丢失 | 经过参数优化配置,可以做到0丢失 |
功能特性 | 并发能力很强,性能极其好,延时很低,管理界面较丰富 | MQ功能比较完备,扩展性佳 | 功能较为简单,支持主要的MQ功能 |
如果使用消息队列主要场景是处理在线业务,比如在交易系统中用消息队列传递订单,需要低延迟和高稳定性,可以使用RabbitMQ和RocketMQ。RocketMQ的社区活跃度,有稳定支持,如果中小型公司,技术实力较为一般,技术挑战不是特别高,用 RabbitMQ 是不错的选择;大型公司,基础架构研发实力较强,用 RocketMQ 是很好的选择。
如果是大数据领域的实时计算、日志采集等场景, Kafka 是业内标准,社区活跃度很高,何况几乎是全世界这个领域的事实性规范。