为什么选择MQ消息队列框架 - 极悦
首页 课程 师资 教程 报名

为什么选择MQ消息队列框架

  • 2021-08-09 16:20:43
  • 851次 极悦

消息队列

即Message Queue,我们从数据结构来理解的话,Queue是一种先进先出的数据结构。所以意思就是将信息(通常指传输的数据)放入一个队列中。

消息队列的两种模式:

消息队列框架

点对点模式

可以看到,点对点模式下有可以有多个消费者,但是对于同一个消息,只会有一个消费者能访问。通常可以用于异步推送消息,保存日志等。

消息队列框架

发布订阅模式

发布订阅模式下,对于同一个主题(topic),任何订阅了topic的消费者都能拉取此消息。通常可以用于构建消息系统。

在项目中使用了消息队列有哪些优势呢?

  • 解耦。各个系统之间不存在直接调用。而是通过消息的传输方式去达成业务需求,这个对于系统的侵入性很低。
  • 提高系统的性能。异步处理的重要性。
  • 便于分布式扩容。原来的代码不需要改动,只需要增加新的功能就行。
  • 数据持久化。
  • 保证部分场景下,数据的有序性。
  • 数据流处理。能更好、实时的处理大数据统计和分析。
  • 分析下市面上比较流行的几种MQ,ActiveMQ、RabbitMQ、Kafka、RocketMQ。

ActiveMQ

由Apache软件基金会所开源,基于java语言开发。算是一个很老的MQ框架了,同时也是一个非常成熟的框架了,早期在很多互联网公司得到广泛的应用。

文档齐全,支持多种语言,支持多种的高级特性,如消息组、通配符、组合队列等。同时对Spring有很好的支持,可以轻易的通过配置文件集成到系统中。

缺点:

  • 吞吐量低。ActiveMQ持久化信息的时候是需要建立索引的,写性能下降,导致吞吐量下降。
  • 没有分片功能。当一个服务器承受不了更多的消息,就需要进行切分了。而ActiveMQ不支持,需要自己去实现。
  • 版本迭代较慢。

RabbitMQ

基于Erlang语言编写的一套开源(MPL)的消息队列服务软件,Erlang语言以高性能、健壮、可伸缩出名,所以RabbitMQ性能很强,吞吐量也很高,支持多种协议,集群化,消息的可靠执行特性等优势,很适合企业的开发。

缺点:

吞吐量较低。

由于RabbitMQ支持的协议多,所以如果要好好学习的话,成本较高。

Kafka

由linkedin开源的,基于scala语言实现的一个高性能分布式Publish/Subscribe消息队列系统。

其实Kafka的由来也挺有意思的。话说linkedin起初是使用ActiveMQ来进行数据系统中数据交换的,上面都说了ActiveMQ性能不咋滴,所以linkedin决定研发自己的消息传递系统,也就是Kafka。

Kafka跟其余的消息中间件比较,那是出名的第一快,以并发量大,社区活跃备受广大组织的喜爱。

Kafka提供了超高的吞吐量,ms级别的延迟,极高的可用性以及可靠性,而且分布式可以任意扩展,还支持大数据框架Hadoop数据并行加载。

缺点:

单机队列不能太高,超过64会导致性能下降。

消息重复消费。对数据准确性会产生影响。

缺乏一套完整的管理和监控工具。

消费失败不支持重试。

RocketMQ

由阿里开源,基于Java实现的一套分布式消息中间件,已经捐献给Apache基金会。

起初阿里也使用ActiveMQ做消息系统,可能也是由于性能、可用性问题,然后才自研RocketMQ。

RocketMQ思路起源于Kafka,单机吞吐量高,消息的高可靠性,如果做好了参数配置,基本不会存在消息丢失的可能,扩展性强,支持事务等。再怎么说,RocketMQ好歹经历过淘宝双11的压力,在阿里内部项目中广泛应用。

缺点:

支持的语言极少,就java和c++。

社区活跃明显比不上kafka和RabbitMQ。

功能不够完整,没去实现JMS接口,系统迁移需要修改大量的代码,增加了维护成本。

以上就是极悦小编介绍的"为什么选择MQ消息队列框架",希望对大家有帮助,想了解更多可查看Java教程。极悦在线学习教程,针对没有任何Java基础的读者学习,让你从入门到精通,主要介绍了一些Java基础的核心知识,让同学们更好更方便的学习和了解Java编程,感兴趣的同学可以关注一下。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交