`
zhaohaolin
  • 浏览: 1011165 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

[转] JMS开源比较

    博客分类:
  • JMS
阅读更多

Java开源JMS消息中间件

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.

-------------------------------------------------------------------------------------------

开源JMS简单比较

我考虑在公司的项目中采用JMS来降低服务器之间的耦合性,但为了降低成本,商业软件是不考虑的,于是只能在开源的并且对商业友好的JMS服务器中选择一个了。选择条件主要基于:

支持JMS 1.1规范 
持久化,能满足商业应用所需的稳定性 
满足项目的性能需求 
最好本身提供JNDI服务 
最好支持JMX 
最好本身提供一个友好的管理工具 
最好提供一份完整的文档
准备进行选择的JMS服务器有:OpenJMS、UberMQ、ActiveMQ、MantaRay、JORAM

OpenJMS:老牌的JMS服务器了,也是我最早知道的开源JMS服务器,不过只支持JMS 1.02,已经很长时间没有更新了,因此不予考虑。

UberMQ:采用NIO的JMS服务器,以前我学习NIO的时候看过它的代码,写的蛮不错的,也支持JMS 1.1。由于采用了NIO,所以具有很高的弹性,在满足项目的性能需求上没有什么问题;本身也提供JNDI服务,但是遗憾的是我bind其他类型的数据时会出错;提供admin和viewer两个管理工具,但是在管理工具里不能创建ConnectionFactory和Destination并绑定到JNDI;文档不太完整;最头痛的对于持久化支持不好,如果关闭JMS服务器再开启,所有保存在JMS中的信息就全部丢失了,这点没有办法满足商业应用所需的稳定性。

ActiveMQ:最近比较活跃的一个JMS服务器,主页上的介绍说在协议配置上可以选择支持NIO,但是我仔细看它所支持的协议,却并没有提到如何配置,并且在实际的测试中也并没有发现其有采用NIO的迹象,多连接一个Client端,服务器端就增多了一个线程。满足JMS 1.1,有多种方法进行持久化;本身不提供JNDI,也没有对JMX的支持,本身不带管理工具,采用Hermes进行管理(这个我会在以后提到),文档也相对较少。

MantaRay:也是比较活跃的一个JMS服务器,采用的是P2P模型,但是我不喜欢这种模型,对于JMS服务来说,很大的一个特点就是客户端可以不用永远在线,比如在更新某一个客户端时需要暂停服务,等服务再度开启时,这段时间内所接收到的信息并不会丢失,保存在服务器上,所以我并不能看到P2P模型应用在JMS服务器上的优势,况且采用JMS服务就是为了解除耦合,速度并不是唯一需要考量的事情。出于我不喜欢其所采用模型,并且在运行其所带的示例时都出现了示例时都出现了问题,两个客户端互发互收,但是彼此之间都收不到消息,于是不予考虑。

JORAM:支持JMS 1.1,可以持久化到文件,本身提供JNDI服务和提供对JMX的支持,自带的管理工具可以添加ConnectionFactory和Destination并绑定到JNDI,这点对实现动态管理来说非常有用;文档非常完备,100多页的PDF,包含了各种配置和调整信息。其稳定性考虑的尤其好,不仅考虑到JMS服务器的集群,甚至连JNDI的集群也考虑进去(尽管暂时对我而言还用不上),这点对于商业应用而言应该会有加分。

ActiveMQ是Apache License,JORAM是LGPL,这两者对于商业应用都是友好的;UberMQ和MantaRay采用是Dual License,UberMQ的Dual License是只要你不分发,就可以允许使用;而MantaRay是商业使用需要应用一个商业的License。

比较上面的这些JMS服务器,最终我是选择了JORAM,其满足了我的绝大部分要求,唯一比较遗憾的是其采用传统的IO模型,每连接一个Client端会在服务器端增加两个线程,这点稍微影响了服务器的弹性。不过考虑到我们的项目应用,这点暂时可以不用考虑,实在压力过大了,最多到时候采用JMS集群呗:)

 
开源JMS再比较

四月份时我曾经比较了那时活跃度比较高的一些开源JMS——《开源JMS简单比较》,时隔四个月,重新回顾这些项目,发现与四个月以前的比较有一些出入,在这里再进行一些比较:)
 
比较的项目没有变化,OpenJMS、UberMQ、ActiveMQ、MantaRay、JORAM,这段时间内没有出现什么JMS新秀,JBoss计划在今年第四季度发布JBoss Messaging,但只要还是捆绑发行,我对其就没什么兴趣。
 
在上次的比较中,OpenJMS已经有比较长的一段时间没有更新了,但最近的四个月似乎又活跃了起来,其预备发行的0.7.7版计划支持JMS 1.1(这个来的太晚了些),其主页上的Changelog表明了接下来的这个版本有着较大的变化。这对那些以前将OpenJMS应用在项目中的人来说是一个不错的消息,但对正在选择JMS的人而言,OpenJMS的这些改进来的还是稍稍晚了些。
 
UberMQ这段时间没有更新,我对它的评价与以前一样,没有任何变化。
 
MantaRay在其主页上更新了一系列的Flash Demos,通过这些Demo,我更坚定了我的看法——MantaRay并不适合用于企业的JMS服务。
 
P2P这个词虽然热,但是不是什么地方都需要P2P的,在我看来JMS就是用于解除各个应用之间的耦合,速度是个关键指标,但比起这个关键指标更重要的是它存在的意义。我更倾向于采用MantaRay在Flash中所反对的那种模型,通过中心服务器进行转发,可以存放离线消息以及解除耦合。更何况,企业应用中很少有类似MantaRay演示DEMO中出现的那种网络拓扑图,并不是任何两个节点之间都是互联互通的。当然,如果MantaRay能够做一些改进,先尝试采用点对点模型,如果点对点失败,这时将消息发送到中心服务器上(但这一切必须对用户透明),我会比较赞成,既具有传统优势,又能提高消息发送接收速度。
 
至于上篇文章中提到的运行其自带的示例出现了问题,这次在Flash演示中终于找到了答案。看来MantaRay真应该提高其示例程序的易用性,这么复杂的操作,要是不看Flash演示,还真难想到该这样操作:(
 
ActiveMQ是让我感到惊讶的一个项目,上次对它的评价似乎有失偏颇。 ActiveMQ支持多种网络拓扑模型,既可以采用传统JMS的Client-Server模型,也可以采用MantaRay的P2P模型,还可以仅仅支持同一JVM内的JMS应用。持久化机制一如既往的优秀,默认采用Apache Derby数据库持久化,也可以配置为各种主流数据库来持久。目前也提供了一简单的JNDI实现,对于JMS应用而言,这已经够用了。
 
但是其缺点也同样明显,本身不提供管理工具;示例代码非常少;虽然主页上的文档看上去比较全面,但是一来缺乏一种有效的组织方式(文档凌乱,用户很难由浅入深进行了解,提高了门槛),二来文档整体的专业性太强(不了解ActiveMQ?看文档去吧,可是文档是写给了解ActiveMQ的用户看的……),对于普通用户而言,门槛有点高。
 
而且感觉ActiveMQ有点不安于JMS的本份,开始做一些周边应用了,看其主页就可以看出来,多了很多比较流行的词汇。说不上这是优点还是缺点,但就我的角度而言,我更希望其专注于做好它的JMS。
 
 JORAM在这段期间推出了4.3.x的版本,也是我们在应用中所采用的版本,我的评价和上次相比没有什么大的变化。主页上说其速度有了提高,但我们应用中JMS数据量相对较少,没有感觉出来。稍微遗憾的是在我们试用的过程中,从4.2.3升级到4.3,老版本的持久化消息都无法在新版本上识别出来,只能全部清空。在兼容性上,看来JORAM还得多下功夫。总而言之,我们在应用中采用JORAM,感觉就是波澜不惊,没碰到什么大问题,也没有什么惊喜。
 
就目前情况,我觉得ActiveMQ和JORAM的竞争力相对较强。再次提醒,JMS的选择一定要慎重,一旦选择好,换起来可是要伤筋动骨的……



Author: orangelizq
email: orangelizq@163.com

分享到:
评论

相关推荐

    java 的Jms开源项目的源代码

    Java的JMS(Java Message Service)开源项目是一个用于在分布式环境中传递消息的API,它为应用程序提供了一种标准的方式来创建、发送、接收和读取消息。JMS是Java平台上的一个核心规范,允许应用程序进行异步通信,...

    开源JMS服务器-openJms

    **开源JMS服务器-openJMS** 开源JMS(Java Message Service)服务器openJMS是企业级消息传递系统的一种实现,它提供了标准JMS接口,用于应用程序之间的异步通信。作为一个开源项目,openJMS提供了可扩展且可靠的...

    前端开源库-jms-deploy

    **前端开源库-jms-deploy** 前端开源库`jms-deploy`是一个专门针对Java消息服务(Java Message Service,简称JMS)的部署工具。它为前端开发者提供了一种便捷的方式来将前端应用部署到支持JMS协议的服务器上,使得...

    前端开源库-jms-storage

    前端开源库-jms-storage是一个专为前端开发者设计的开源存储解决方案,它主要针对JavaScript应用程序中的数据存储需求。JMS Storage不仅提供了一种在浏览器环境中持久化数据的手段,还支持与JMS(Java消息服务)...

    开源的JMS服务器和源码

    OpenJMS是一个开源的Java Message Service API 1.0.2 规范的实现,它包含有以下特性: *. 它既支持点到点(point-to-point)(PTP)模型和发布/订阅(Pub/Sub)模型。 *. 支持同步与异步消息发送 *. JDBC持久性...

    Ant-JMS-开源

    《Ant-JMS:开源软件在Java消息服务中的应用》 Ant-JMS,作为一个开源项目,为Java开发人员提供了一个简洁的Ant任务,使得在构建流程中发送JMS(Java Message Service)消息变得轻而易举。这个工具的核心价值在于它...

    JMS 使用 ActiveMQ 传送文件

    ActiveMQ是Apache软件基金会开发的一个开源JMS提供者,它提供了高性能、可靠的跨语言消息传递服务。 **描述:** 尽管描述中并未给出具体信息,但我们可以推断这篇博文可能详细介绍了如何使用JMS与ActiveMQ结合来...

    JMS 简单使用指南

    - **OpenJMS**:这是一个开源的JMS实现,遵循JMS 1.0.2规范,适合用于学习和研究JMS。 - **iLinkMQ**:由中国人开发的纯Java实现,完全支持JMS接口规范1.0.2,提供事务和可靠消息传输等功能,适用于企业级应用。 ...

    JBOSS建立JMS应用实例

    JBOSST(Java Business Open Source Solutions)是一个开源的企业级应用服务器,它提供了全面的中间件服务,包括对Java消息服务(JMS)的支持。JMS是一种标准,用于在分布式环境中传递消息,提供了一种可靠且异步的...

    SpringJMS示例代码

    ActiveMQ是Apache软件基金会的一个开源项目,是一个功能丰富的JMS提供商,支持多种协议,如TCP/IP、HTTP、HTTPS等。它提供了高可用性、可扩展性和消息持久化,是许多企业级应用的理想选择。 4. **SpringJMS与...

    JMS相关的Source

    首先,JBoss是一个开源的应用服务器,它支持多种Java EE规范,包括JMS。在Jboss中,JMS服务通常通过 HornetQ 或 ActiveMQ 这样的消息代理实现。HornetQ是JBoss早期版本内置的消息中间件,而ActiveMQ则是在较新版本中...

    spring-jms入门

    ActiveMQ是Apache提供的开源JMS消息代理,具有高性能、高可用性等特点。配置Spring-JMS与ActiveMQ的集成,主要涉及连接工厂和目的地的配置。 **9. Spring Boot与Spring-JMS** 在Spring Boot项目中,通过添加相关...

    jms.rar_jar j_java jms_jms_jms jar_jms.j

    `openjms-0.7.7-beta-1`则是OpenJMS的一个早期版本,OpenJMS是一个开源的JMS实现,提供了消息中间件的功能,用于处理和传递消息。 现在,我们详细讨论一下JMS的核心概念和应用场景: 1. **消息队列**:JMS通过消息...

    jms

    标题中的“jms”指的是Java消息服务(Java Message Service),它是Java平台中用于在分布式环境...如果你对JMS的具体实现、使用案例或最佳实践感兴趣,可以进一步探索相关的开源项目、文档或在线课程,以深化你的理解。

    MSMQ to JMS-开源

    MSMQ到JMS开源项目是将Microsoft Message Queuing (MSMQ)与Java消息服务(JMS)连接起来的一种解决方案。这个项目的核心目标是为开发者提供一个桥梁,让他们能够在基于MSMQ的系统和JMS之间进行无缝通信。MSMQ是...

    ApacheCamel-JMS-ActiveMQ

    ActiveMQ 是一个流行的开源JMS提供者,它支持多种协议,如AMQP、STOMP和OpenWire等。 在"Apache Camel JMS ActiveMQ"的使用样例中,我们有两个主要的场景: 1. **从本地读取信息推送到MQ中**:这一部分涉及到了...

    JMS中间件ActiveMQ介绍

    ActiveMQ 是Apache基金会维护的一款开源消息中间件,它实现了JMS 规范,并提供了丰富的特性和功能。ActiveMQ 可以帮助应用程序在不同的系统之间进行通信,实现消息的异步传输。 - **关键特点**: - **可移植性**:...

    activeMQ-JMS实例

    ActiveMQ是Apache软件基金会开发的一款开源消息代理,它实现了JMS规范,允许应用程序之间进行异步通信。JMS是一种标准接口,用于Java平台上的消息传递,提供了可靠的消息传递机制,确保消息的顺序和持久性,同时也...

    flex用到JMS代码下载

    ActiveMQ是Apache组织的一个开源项目,它是JMS的实现之一,提供了高性能、高可靠性的消息中间件。在本例中,你需要下载并安装ActiveMQ,然后启动它的服务作为消息代理,使得Flex客户端可以通过它与服务器进行JMS...

Global site tag (gtag.js) - Google Analytics