科普:
- 把数据放到消息队列叫做生产者
- 从消息队列里边取数据叫做消费者
一、为什么要用消息队列?
消息队列主要有三大用途 :解耦、异步、削峰,是消息队列最主要的三大作用。
二、为什么选择RocketMQ
选择中间件的可以从这些维度来考虑:可靠性,性能,功能,可运维行,可拓展性,社区活跃度。目前常用的几个中间件,ActiveMQ作为“老古董”,市面上用的已经不多,其它几种:
-
RabbitMQ:
-
优点:轻量,迅捷,容易部署和使用,拥有灵活的路由配置
-
缺点:性能和吞吐量不太理想,不易进行二次开发
-
RocketMQ:
-
优点:性能好,高吞吐量,稳定可靠,有活跃的中文社区
-
缺点:兼容性上不是太好
-
Kafka:
-
优点:拥有强大的性能及吞吐量,兼容性很好
-
缺点:由于“攒一波再处理”导致延迟比较高
我们的系统是面向用户的C端系统,具有一定的并发量,对性能也有比较高的要求,所以选择了低延迟、吞吐量比较高,可用性比较好的RocketMQ。
三.RocketMQ有什么优缺点?
RocketMQ优点:
-
单机吞吐量:十万级
-
可用性:非常高,分布式架构
-
消息可靠性:经过参数优化配置,消息可以做到0丢失
-
功能支持:MQ功能较为完善,还是分布式的,扩展性好
-
支持10亿级别的消息堆积,不会因为堆积导致性能下降
-
源码是Java,方便结合公司自己的业务二次开发
-
天生为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况
-
RoketMQ在稳定性上可能更值得信赖,这些业务场景在阿里双11已经经历了多次考验,如果你的业务有上述并发场景,建议可以选择RocketMQ
RocketMQ缺点:
-
支持的客户端语言不多,目前是Java及c++,其中c++不成熟
-
没有在 MQ核心中去实现JMS等接口,有些系统要迁移需要修改大量代码