一、为什么要使用消息中间件
消息中间件就是可以省去繁琐的步骤,直达目的,怎么讲呢,就是比如你想很多人,知道你的动态,而知道的人可能手机没电,可能手机信号不好,可能手机不在服务区,或者看的人比较忙,看的时间不固定,这样的时候,你发送的消息怎么会让其看到呢,就是建立一个微信公众号,可以满足用户随时看到你想让其看到的消息,这就是中间件的一种应用方式,生活中老师讲课的黑板,家中的电视机都是中间件的一种体现方式。
消息中间件的好处
1、解耦
2、异步
3、横向扩展 :就是可以通过一个中间件进行一个功能多次的操作
4、安全可靠 消息中间件可以把消息保存
5、顺序保存,比如kafka
二、什么是中间件
非底层操作系统软件,非业务应用软件,不是给最终用户使用,不能直接给用户带来价值的软件统称为中间件。
三、什么是消息中间件
关注于数据的发送和接受,利用高效可靠的异步消息传递机制集成分布式系统。
四、什么是JMS
Java消息服务(Java Message Service)即JMS,是一个Java平台中关于面向消息中间件的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
五、什么是AMQP
AMQP(advanced message queuing protocol)是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制.
常见消息中间件对比
1、ActiveMQ
ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线. ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位.
ActiveMQ特性
(1)多种语言和协议编写客户端.语言:
Java,C,C++,C#,Ruby,Perl,Python,PHP.
(2)应用协议:
OpenWire、Stomp REST,WS Notification,XMPP,AMQP
(3)完全支持JMS1.1和J2EE1.4规范(持久化,XA消息,事务)
(4)虚拟主题、组合目的、镜像队列
2、RabbitMQ
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
RabbitMQ特性
(1)支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript等
(2)AMQP的完整实现(vhost、Exchange、Binding、Routing Key 等)
(3)事务支持/发布确认
(4)消息持久化
3、Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,是一个分布式的、分区的、可靠的分布式日志存储服务。它通过一种独一无二的设计提供了一个消息系统的功能。(不是个严格的中间件,主要是用于日志转存的)
Kafka特性:
(1)通过O(1) 的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
(2)高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。
(3)Partition、Consumer Group