
三个主流消息中间件区别.docx
16页市场上的消息中间件:mom4j mom4j 是一个完全实现 JMS1.1 规范的消息中间件并且向下兼容 JMS1.0 与 1.02.它提供了自己的消息处理存储使它独立于关系数据与语言,所以它的客户端可以用任何语言开发.OpenJMS OpenJMS 是一个开源的 Java Message Service API 1.0.2 规范的实现,它包含有以下特性: *. 它既支持点到点(point-to-point) (PTP)模型和发布/订阅(Pub/Sub)模型 *. 支持同步与异步消息发送 *. JDBC 持久性管理使用数据库表来存储消息 *. 可视化管理界面 *. Applet 支持 *. 能够与 Jakarta Tomcat 这样的 Servlet 容器结合 *. 支持 RMI, TCP, HTTP 与 SSL 协议 *. 客户端验证 *. 提供可靠消息传输、事务和消息过滤UberMQ UberMQ 完全实现了 Java Message Service 规范 UberMQ 是因为现有的许多 JMS提供商已经违背了分布式计算的核心原则:快速与简单而开发的Hermes JMS 利用它提供的 Swing UI 可以很好的实现监控 JMS providers。
ActiveMQ ActiveMQ 是一个开放源码基于 Apache 2.0 licenced 发布并实现了 JMS 1.1它能够与 Geronimo,轻量级容器和任 Java 应用程序无缝的给合Somnifugi Somnifugi 使得工作在同一个 java 虚拟机中的线程能实现消息互发MantaRay MantaRay 基于 peer-2-peer 技术它具有以下特性: 1.它既支持点对点(point-to-point) 的域,又支持发布/订阅(publish/subscribe)类型的域 2.并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持 3.消息过滤体制 4.能与 WebLogic and WebSphere 给合 5.支持 TCP, UDP 与 HTTP 传输协 Presumo Presumo 也是一个实现 Java Message Service API 的 JMS 消息中间件JORAM JORAM 一个类似于 openJMS 分布在 ObjectWeb 之下的 JMS 消息中间件JMS4Spread JMS4Spread 是一个消息系统 .它部分地实现了 Java 消息服务(JMS) API.Open Message Queue Open Message Queue 是 Sun Java System Message Queue 的一个开源版本。
Open message queue 是一个企业级,可升级,非常成熟的消息服务器它为面向消息的系统集成提供一套完整的 JMS(Java Message Service )实现由于 Open MQ 源自 Sun 的 Java Message Queue,所以其具有 Java System Message Queue 拥有的所有特性,功能和性能 FFMQ FFMQ 是一个轻量级,高性能,快速的 Native JMS1.1 开源实现支持 SSL 远程连接,自动防故障的持久化机制,基于模板定义目的地(Destination ) ,采用模式匹配自动创建目的地(Destination) MQSSave/MQSLoad MQSSave 是一个简单的 Java 程序,能够读取 MQSeries 队列的消息保存至文件中而MQSLoad 是一相反的 Java 程序,能够读取文件中的消息然后加载至 MQSeries 队列中HornetQ HornetQ 是一个支持集群和多种协议,可嵌入、高性能的异步消息系统HornetQ 完全支持 JMS,HornetQ 不但支持 JMS1.1 API 同时也定义属于自己的消息 API,这可以最大限度的提升 HornetQ 的性能和灵活性。
在不久的将来更多的协议将被 HornetQ 支持 HornetQ 拥有超高的性能,HornetQ 在持久化消息方面的性能可以轻易的超于其它常见的非持久化消息引擎的性能当然,HornetQ 的非持久化消息的性能会表现的更好! HornetQ 完全使用 POJO,纯 POJO 的设计让 HornetQ 可以尽可能少的以来第三方的包从设计模式来说,HornetQ 这样的设计入侵性也最小 HornetQ 既可以独立运行,也可以与其它 Java 应用程序服务器集成使用 HornetQ 拥有完善的错误处理机制,HornetQ 提供服务器复制和故障自动转移功能,该功能可以消除消息丢失或多个重复信息导致服务器出错 HornetQ 提供了灵活的集群功能,通过创建 HornetQ 集群,您可以享受到到消息的负载均衡带来的性能提升您也可以通过集群,组成一个全球性的消息网络您也可以灵活的配置消息路由 HornetQ 拥有强大的管理功能HornetQ 提供了大量的管理 API 和监控服务器它可以无缝的与应用程序服务器整合,并共同工作在一个 HA 环境中 Apache Qpid Apache Qpid 是最新开放企业信息标准 AMQP(Advanced Message Queuing Protocol)的一个开源实现。
Java 版实现完全支持 JMS 标准,可运行在任意 Java 平台上此外 Qpid 还提供 AMQP Client APIs 的各种语言实现包括: C++ Java, fully conformant with JMS 1.1 C# .NET, 0-10 using WCF Ruby PythonSpring AMQP Spring AMQP 是一个用于替换原先 Spring JMS 支持的消息解决方案提供收发消息的模板,还支持基于消息驱动的 POJO用法和配置与 Spring 中对 JMS 的支持一样这个项目包含 Java 和.NET 两个版本 Kafka Kafka 是一个高吞吐量分布式消息系统linkedin 开源的 kafka Kafka 就跟这个名字一样,设计非常独特首先,kafka 的开发者们认为不需要在内存里缓存什么数据,操作系统的文件缓存已经足够完善和强大,只要你不搞随机写,顺序读写的性能是非常高效的kafka 的数据只会顺序 append,数据的删除策略是累积到一定程度或者超过一定时间再删除Kafka 另一个独特的地方是将消费者信息保存在客户端而不是 MQ 服务器,这样服务器就不用记录消息的投递过程,每个客户端都自己知道自己下一次应该从什么地方什么位置读取消息,消息的投递过程也是采用客户端主动 pull 的模型,这样大大减轻了服务器的负担。
Kafka 还强调减少数据的序列化和拷贝开销,它会将一些消息组织成 Message Set 做批量存储和发送,并且客户端在 pull 数据的时候,尽量以 zero-copy 的方式传输,利用 sendfile(对应 java 里的 FileChannel.transferTo/transferFrom)这样的高级IO 函数来减少拷贝开销可见,kafka 是一个精心设计,特定于某些应用的 MQ 系统,这种偏向特定领域的 MQ 系统我估计会越来越多,垂直化的产品策略值的考虑 play-rabbitmq 这是 Play! Framework 开发框架的一个扩展模块用于生产和消费 RabbitMQ 消息 队列消息系统 FQueue FQueue 是一个高性能、基于磁盘持久存储的队列消息系统兼容 memcached 协议,能用 memcached 的语言都可以良好的与它通信 FQueue 为你提供一个不需要特别优化,高性能的一个消息系统 特性1. 基于磁盘持久化存储 2. 支持 memcached 协议 3. 支持多队列,密码验证功能 4. 高性能,能达到数十万 qps 5. 低内存消耗100-300M 内存即可工作得很好。
6. 高效率 IO 读写算法,IO 效率高 7. 纯 JAVA 代码支持进程内 JVM 级别的直接调用 8. 在不需要强顺序的场景下,支持多机负载均衡 不支持1. 不支持 topic 方式的订阅功能 2. 不支持主从复制 主流消息中间件及选型推荐:ActiveMQ:(还有升级版叫 Apollo, 由于转向 Scala,原来的架构都要改掉但是只支持storm 协议,不支持 JMS) ,在网络上别人反映,消息量越来越大时,当出现消息堆积时,性能争骤下降,主要卡在磁盘写入,用了硬件加速,也还是不能忍受消息中间件的技术选型心得-RabbitMQ、ActiveMQ 和 ZeroMQ作者:chszs,转载需注明博客主页: 和 ZeroMQ 都是极好的消息中间件,但是我们在项目中该选择哪个更适合呢?很多开发者面临这个烦恼下面我会对这三个消息中间件做一个比较,看了后你们就心中有数了RabbitMQ 是 AMQP 协议领先的一个实现,它实现了代理(Broker)架构,意味着消息在发送到客户端之前可以在中央节点上排队此特性使得 RabbitMQ 易于使用和部署,适宜于很多场景如路由、负载均衡或消息持久化等,用消息队列只需几行代码即可搞定。
但是,这使得它的可扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大ZeroMQ 是一个非常轻量级的消息系统,专门为高吞吐量/ 低延迟的场景开发,在金融界的应用中经常可以发现它与 RabbitMQ 相比,ZeroMQ 支持许多高级消息场景,但是你必须实现 ZeroMQ 框架中的各个块(比如 Socket 或 Device 等) ZeroMQ 非常灵活,但是你必须学习它的 80 页的手册(如果你要写一个分布式系统,一定要阅读它) ActiveMQ 居于两者之间,类似于 ZemoMQ,它可以部署于代理模式和 P2P 模式类似于RabbitMQ,它易于实现高级场景,而且只需付出低消耗它被誉为消息中间件的“ 瑞士军刀”要注意一点,ActiveMQ 的下一代产品为 Apollo最终,这三个产品:1. 都有客户端 API 且支持多种编程语言;2. 都有大量的文档;3. 都提供了积极的支持ActiveMQ RabbitMQ ZeroMQ遵循规范 JMS1.1 及 j2ee1.4 AMPQ -----架构模型 消息代理架构 Broker 消息代理架构Brokerc/s 架构实现语言 Java Erlang c/c++支持消息协议 Stomp AMPQ、 Stomp 等 --------主要推动力量 Apache、Redhat Lshift、Vmware 、SpringSourceIMatix支持编程语言 C、Java、Python C、Java、Python C、Java、Python编程复杂度 复杂 简单 中等持久化 支持 支持,不支持第三方数据库发送端缓存性能 一般 一般 高三个经典消息中间件的比较 对于消息中间件,绝大多数熟悉的是 MQ(IBM 公司出品),这是目前使用最广泛的中间件产品。
还有两个也比较流行,他们是 JMS 和 RVJMS 即 JAVA 消息服务(Java Message Service)应用程序接口是一个 JAVA 平台中关于面向消息中间件的 API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信,是一个与具体平台无关的 APITIBCO Rendezvous(或称为 TIBCO RV)也是一种中间件,具有发布 /订阅(Publish/Sub。
