消息中间件

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 消息中间件

消息中间件

我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息中间件,只是粗略的讲解。


举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋。假设消费者消费鸡蛋时噎住了(系统宕机了),但是生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里,而这个篮子就是消息中间件。


鸡蛋其实就是“数据流”,系统之间的交互都是通过“数据流”来传输的(就是tcp、http什么的),也称为报文,也叫“消息”。消息队列满了,其实就是篮子满了,”鸡蛋“ 放不下了,那赶紧多放几个篮子,其实就是"消息中间件"的扩容。

常见的消息中间件

ActiveMQ

Apache下的一个子项目。使用Java完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,少量代码就可以高效地实现高级应用场景。可插拔的传输协议支持,比如:in-VM, TCP, SSL, NIO, UDP, multicast, JGroups and JXTA transports。RabbitMQ、ZeroMQ、ActiveMQ均支持常用的多种语言客户端 C++、Java、.Net,、Python、 Php、 Ruby等。

RabbitMQ

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。 AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

Kafka

kafka是一个分布式消息队列。具有高性能、持久化、多副本备份、横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在架构设计中起到解耦、削峰、异步处理的作用。

RocketMq

RocketMq是一个由阿里巴巴开源的消息中间件,脱胎去阿里每部使用的MetaQ,在设计上借鉴了Kafka。2012年开源,2017年成为apache顶级项目。

20200401134307494.png

一般的业务系统要引入 MQ,最早大家都用 ActiveMQ,但是现在确实大家用的不多了,没经过大规模吞吐量场景的验证,社区也不是很活跃,所以大家还是算了吧,我个人不推荐用这个了;


后来大家开始用 RabbitMQ,但是确实 erlang 语言阻止了大量的 Java 工程师去深入研究和掌控它,对公司而言,几乎处于不可控的状态,但是确实人家是开源的,比较稳定的支持,活跃度也高;


不过现在确实越来越多的公司会去用 RocketMQ,确实很不错,毕竟是阿里出品,但社区可能有突然黄掉的风险(目前 RocketMQ 已捐给 Apache,但 GitHub 上的活跃度其实不算高)对自己公司技术实力有绝对自信的,推荐用 RocketMQ,否则回去老老实实用 RabbitMQ 吧,人家有活跃的开源社区,绝对不会黄。


所以中小型公司,技术实力较为一般,技术挑战不是特别高,用 RabbitMQ 是不错的选择;大型公司,基础架构研发实力较强,用 RocketMQ 是很好的选择。


如果是大数据领域的实时计算、日志采集等场景,用 Kafka 是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这个领域的事实性规范。


参考博文:

http://www.aboutyun.com/thread-26974-1-1.html

为什么要使用MQ消息中间件?它解决了什么问题?

学习博文:

https://www.jianshu.com/p/2820561158c4

https://blog.csdn.net/btt2013/article/details/80211599

消息中间件的使用场景

https://blog.csdn.net/yexiaomodemo/article/details/80444732

https://blog.csdn.net/java_zyq/article/details/80022391


有兴趣的老爷,可以关注我的公众号【一起收破烂】,回复【006】获取2021最新java面试资料以及简历模型120套哦~



相关文章
|
11月前
|
消息中间件 开发框架 运维
J2EE开发中消息中间件的介绍和选择
J2EE开发中消息中间件的介绍和选择
140 0
|
6月前
|
消息中间件 开发框架 关系型数据库
02常见消息中间件对比
02常见消息中间件对比
51 0
|
9月前
|
消息中间件 前端开发 数据库
为什么使用消息中间件
为什么使用消息中间件
98 0
|
8月前
|
消息中间件 存储 监控
高性能消息中间件 RocketMQ(二)
高性能消息中间件 RocketMQ(二)
|
8月前
|
消息中间件 存储 Java
高性能消息中间件 RocketMQ(一)
高性能消息中间件 RocketMQ(一)
|
8月前
|
消息中间件 存储 负载均衡
高性能消息中间件 RocketMQ(三)
高性能消息中间件 RocketMQ(三)
|
10月前
|
消息中间件 Java Spring
消息中间件MQ
个人理解
71 0
|
11月前
|
消息中间件 存储 Java
【消息队列】消息中间件RocketMQ4.X急速入门3
【消息队列】消息中间件RocketMQ4.X急速入门
|
消息中间件 存储 Cloud Native
技术盘点:消息中间件的过去、现在和未来
目前以“事件驱动”构建的数字化商业生态才刚起步,未来 EventBridge 将围绕事件这一抽象层次实现更强大的能力,比如事件的全链路可观测、事件分析计算、低代码开发等特性,帮助企业全面落地云时代的“事件驱动”架构。
217 1
技术盘点:消息中间件的过去、现在和未来
|
消息中间件 存储 运维
MQ系列2:消息中间件的技术选型
MQ系列2:消息中间件的技术选型
158 0
MQ系列2:消息中间件的技术选型