消息中间件:MQ的优缺点及各个消息中间件的比较

1、什么是MQ

       消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。

       上面的这个是百度百科对MQ的定义,简单来说MQ就是用来系统之间进行数据传递的。比如:A系统和B系统之间要进行消息传递,我们常用的方式可能是某一个系统提供一个接口,另一个系统调用该接口来传递数据,从而满足业务需求。但是,更好的方式是使用消息队列来实现。假设A系统需要向B系统传递消息,那么A系统可以向消息队列中写入一条消息,而B系统则可以监听消息队列,当有消息的时候,B系统可以从消息队列中取出该消息进行消费。

2、MQ的优点

       可能你会问:明明通过调用接口就可以进行系统之间的交流了,为什么还要用MQ呢?使用MQ当然有他的好处的,主要的好处是三点:解耦、异步和削峰。

3、MQ的缺点

1、系统可用性降低。比如在系统中引入MQ,那么万一MQ挂了怎么办呢?一旦MQ挂了,那么系统之间的通信就完全断开了,导致了系统不可用。这在实际情况中,是有这种情况发生的。一般而言,引入的外部依赖越多,系统越脆弱,每一个依赖出问题都会导致整个系统的崩溃。
2、系统复杂度提高。本来系统直接通过接口调用就可以了的,如果引入了MQ之后,就需要考虑MQ的各种情况,比如:消息的重复消费、消息丢失、保证消费顺序等等......,使得系统越来越复杂。
3、数据一致性问题。比如A系统已经给客户返回操作成功,这时候操作BC都成功了,操作D却失败了,导致数据不一致。

       所以在软件的正常功能开发中,并不需要去刻意的寻找消息队列的使用场景,而是当出现性能瓶颈时,去查看业务逻辑是否存在可以异步处理的耗时操作,如果存在的话便可以引入消息队列来解决。否则盲目的使用消息队列可能会增加维护和开发的成本却无法得到可观的性能提升,那就得不偿失了

开发中,该选择哪种消息中间件,下面给出几点小建议:

1、ActiveMQ已经不推荐使用了,因为社区活跃度很低,没什么人再去维护了。一旦使用过程中出现了问题,比较难以找到解决办法;

2、RabbitMQ现在是使用的比较多的,吞吐量也达到了万级,而且延时低,最好的一个优点就是它提供了一个后台管理系统,对于中小型公司来说很有用的;同时目前来看,社区活跃度也比较高。缺点就是开发语言使用的是erlang语言,对于Java开发者来说,erlang语言比较难以看懂,不能去深入的研究,只能简单的使用。

3、RocketMQ的阿里开源的,现在社区也比较活跃,并且是用Java语言开发的,支持分布式集群。但是有被弃用的风险,一旦阿里什么时候不维护了,那么就有可能被废弃掉。如果是有能力大公司还好,可以自己去钻研源码,自己维护,如果是小公司的话,那么就被坑了。

4、Kafka主要用在大数据领域。它的主要优点就是吞吐量大,同时也是分布式的 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值