初识消息中间件

文章目录

 

1, 引题

消息中间件是什么,是一种标准,仍是一种具体的 工具为何叫消息中间件?带着这些疑问,笔者开始走进消息中间件的世界。html

2, 消息中间件的定义

通俗来讲,就是能够对数据信息进行异步传递的中介。从编程的角度来讲,这里的消息就是咱们一般意义上的数据,中间件是某种软件或者程序,接收咱们的消息并分发给指定的目标程序,中间件并不关注参数自己的意义,可是其须要遵循必定的标准,好比平台特性、消息传递方式、消息传递可靠性等。(叫作数据中转站怎么样?)数据库

3, 消息中间件出现的背景

伴随着分布式系统的出现,各系统之间的交互愈来愈复杂,一次业务处理须要调用的 API 愈来愈多,系统耦合性在加大,处理效率却在急剧降低。再一个,系统存在高峰调用和低峰调用,高峰调用所需的性能超过了系统的承受能力,而低峰时段系统的性能却白白浪费了。这个时候,人们就开始思考解决这个问题了,伴随着一些列的努力和探索,消息中间件终于出现了,而且呈现出了一种百花齐放的局面。apache

4, 消息中间件解决了什么问题?

4.1 业务解耦:相比于传统 RPC 调用,消息中间件对数据的处理是异步的,这意味着客户端无需等待消息处理结束,而只须要关注消息是否成功投送给消息中间件,至于结果的处理则由后面的环节去负责。客户端经过消息中间件传递数据给服务端,业务解耦了,从而下降了系统的耦合度,有利于系统扩展和报错时的问题排查。
4.2 系统效率提高:将紧迫程度较高的业务使用传统同步调用的方式处理,对紧迫程度较低的业务经过异步的消息中间件传递给下游服务端处理,相比同步调用而言,所耗费的时间较少了,从而提高了系统效率。固然,随着业务的发展和人们孜孜不倦的探索,消息中间件已经能够用于对时效性要求较高的场景了。
4.3 系统综合可用性提高:从系统解耦的角度来讲,串行的调用100个接口和并行的调用100个接口,其中一个接口出现问题对系统整体可用性的影响度是显而易见的。再一个,消息中间件异步处理消息的模式,能够对系统起到“削峰填谷”的做用,当客户端访问量大于服务端的时候,能够先将过量的服务存储在消息队列中,待到服务端有富余的性能时再对消息队列中的业务数据进行处理,从而提高了系统的综合可用性。编程

5, 生产者和消费者的概念

生产者即消息的产生者,生产者将消息发送给消息中间件,消息中间件对消息进行转发或者存储,消费者从消息中间件获取消息。生产者是产生消息的程序,消费者是消耗消息的程序,消息中间件是中介。安全

6, 消息中间件的标准JMS 和 AMQP

须要强调的是,消息中间件并不是只有 JMS 和 AMQP 两种标准。
如下内容摘自《Spring 实战第4版》
6.1 JMS (Java消息服务,Java Message Service): 是一个Java标准, 定义了使用消息代理的通用API。 在JMS出现以前, 每一个消息代理都有私有的API, 这就使得不一样代理之间的消息代码很难通用。 可是借助JMS, 全部听从规范的实现都使用通用的接口, 这就相似于JDBC为数据库操做提供了通用的接口同样。
在JMS中, 有三个主要的参与者: 消息的生产者、 消息的消费者以及在生产者和消费者之间传递消息的通道( 队列或主题)
6.2 AMQP (高级消息队列协议 Advanced Message Queuing Protocol): AMQP的线路层协议规范了消息的格式, 消息在生产者和消费者间传送的时候会遵循这个格式。 这样AMQP在互相协做方面就要优于JMS——它不只能跨不一样的AMQP实现, 还能跨语言和平台。相比JMS, AMQP另一个明显的优点在于它具备更加灵活和透明的消息模型。 使用JMS的话, 只有两种消息模型可供选择: 点对点和发布-订阅。 这两种模型在AMQP固然都是能够实现的, 但AMQP还可以让咱们以其余的多种方式来发送消息, 这是经过将消息的生产者与存放消息的队列解耦实现的。服务器

7, 常见的消息中间件

下面内容摘自 https://mp.weixin.qq.com/s/Zwd1USlOCkQvsG96eSwvpg#%23
7.1 ActiveMQ: 是Apache出品的、采用Java语言编写的彻底基于JMS1.1规范的面向消息的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通讯。不过因为历史缘由包袱过重,目前市场份额没有后面三种消息中间件多,其最新架构被命名为Apollo,号称下一代ActiveMQ,有兴趣的同窗可行了解。据官网了解 ,ActiveMQ 目前已经支持AMQP v1.一、MQTT v3.一、Stomp 和 OpenWire。初识 ActiveMQ 及 安装和启动
7.2 RabbitMQ: 是采用Erlang语言实现的AMQP协议的消息中间件,最初起源于金融系统,用于在分布式系统中存储转发消息。RabbitMQ发展到今天,被愈来愈多的人承认,这和它在可靠性、可用性、扩展性、功能丰富等方面的卓越表现是分不开的。
7.3 Kafka: 起初是由LinkedIn公司采用Scala语言开发的一个分布式、多分区、多副本且基于zookeeper协调的分布式消息系统,现已捐献给Apache基金会。它是一种高吞吐量的分布式发布订阅消息系统,以可水平扩展和高吞吐率而被普遍使用。目前愈来愈多的开源分布式处理系统如Cloudera、Apache Storm、Spark、Flink等都支持与Kafka集成。
7.4 RocketMQ: 是阿里开源的消息中间件,目前已经捐献给Apache基金会,它是由Java语言开发的,具有高吞吐量、高可用性、适合大规模分布式系统应用等特色,经历过双11的洗礼,实力不容小觑。移步 http://rocketmq.apache.org/docs/motivation/
7.5 ZeroMQ: 号称史上最快的消息队列,基于C语言开发。ZeroMQ是一个消息处理队列库,可在多线程、多内核和主机之间弹性伸缩,虽然大多数时候咱们习惯将其纳入消息队列家族之中,可是其和前面的几款有着本质的区别,ZeroMQ自己就不是一个消息队列服务器,更像是一组底层网络通信库,对原有的Socket API上加上一层封装而已。网络

7.6 目前市面上的消息中间件还有不少,好比腾讯系的PhxQueue、CMQ、CKafka,又好比基于Go语言的NSQ,有时人们也把相似Redis的产品也看作消息中间件的一种,固然它们都很优秀······
 多线程

参考连接

文献很丰富,网络让知识自由流动架构

[1].《Spring 实战 第4版》
[2].https://blog.csdn.net/winter_chen001/article/details/78409125
[3].https://blog.csdn.net/u013123635/article/details/78362360
[4].https://www.cnblogs.com/Peter2014/p/8080192.html
[5].https://blog.csdn.net/wowwilliam0/article/details/81110943
[6].https://blog.csdn.net/lsj960922/article/details/79926947
[7].https://blog.csdn.net/wangfengwf/article/details/78966704
[8].https://blog.csdn.net/hpttlook/article/details/23391967异步

相关文章
相关标签/搜索