消息中间| JAVA消息中间件概述


什么是中间件?

中间件(英语:Middleware),又译中间件、中介层,是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,在现代信息技术应用框架如Web服务、面向服务的体系结构等中应用比较广泛。

简单的来讲中间件就是非底层操作系统软件,非业务应用软件,不是直接给最终用户使用的,不能直接给客户带来价值的软件统称为中间件。如数据库、Apache的Tomcat,IBM公司的WebSphere,BEA公司的WebLogic应用服务器


什么是消息中间件?

关注于数据的发送和接受,利用高效可靠的异步消息传递机制继承分布式系统。


什么是Java消息服务(JMS)?

Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

Java消息服务的规范包括两种消息模式,点对点和发布者/订阅者。许多提供商支持这一通用框架因此,程序员可以在他们的分布式软件中实现面向消息的操作,这些操作将具有不同面向消息中间件产品的可移植性。
参考:https://zh.wikipedia.org/wiki/Java消息服务


什么是AMQP?

高级消息队列协议即Advanced Message Queuing Protocol(AMQP)是一个用于统一面向消息中间件实现的一套标准协议,其设计目标是对于消息的排序、路由(包括点对点和订阅-发布)、保持可靠性、保证安全性。

高级消息队列协议保证了由不同提供商发行的客户端之间的互操作性。与先前的中间件标准(如Java消息服务),在特定的API接口层面和实现行为进行了统一不同,高级消息队列协议关注于各种消息如何作为字节流进行传递。因此,使用了符合协议实现的任意应用程序之间可以保持对消息的创建、传递。

参考:https://zh.wikipedia.org/wiki/高级消息队列协议


JMS与AMQP对比?

消息中间| JAVA消息中间件概述


几种常见消息中间件

ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMSProvider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中仍扮演者特殊的地位.

由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。

ActiveMQ的特性:
支持Java消息服务 (JMS) 1.1 版本和J2EE 1.4 规范(持久化,XA消息,事务)
支持的编程语言包括:C、C++、C#、Delphi、Erlang、Adobe Flash、Haskell、Java、JavaScript、Perl、PHP、Pike、Python和Ruby
应用协议支持包括:OpenWire、REST、STOMP、WS-Notification、MQTT、XMPP以及AMQP
Spring Framework
集群 (Clustering)

RabbitMQ

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,用于在分布式系统中存储转发消息,在易用性,扩展性,高可用性等方面表现不俗.

RabbitMQ主要特性:
支持多种客户端: 如Python、Java、Ruby、PHP、C#、JavaScript、Go、Elixir、 Objective-C、Swift、
AMQP的完整实现(vhost、Exchange、Binding、Routing Key等)
事务支持/发布确认
消息持久化:从内存持久化消息到硬盘,再从硬盘加载到内存
可伸缩性:集群服务

Kafka

Kafka是一种高吞吐量的分布式发布订阅消息系统,是一个分布式的、分区的、可靠的分布式日志存储服务.他通过一种独一无二的设计提供了一个消息系统的工功能.

Kafka本身不是一个严格的消息中间件,但是对日志的存取顺序非常严格

Kafka特性
通过时间复杂度O(1)的磁盘数据结构提供消息的持久化,这种数据结构对于即使数以TB的消息存储也能够保持长时间的稳定性能
高吞吐量: 即使是非常普通的硬件Kafka也是可以支持每秒数以百万的消息.
Partition(分区) 、Consumer Group(消费者分组)

综合评价

消息中间| JAVA消息中间件概述