java开源消息服务(OpenJMS&ActiveMQ)

本文深入分析了OpenJMS、UberMQ、MantaRay、ActiveMQ、JORAM等开源JMS服务器,从支持规范、持久化能力、性能、管理工具和文档完整性等方面,探讨了它们在商业应用中的适用性和优劣,最终推荐适合商业项目的JMS服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司的一个中间件框架中要提供消息服务。我考虑了下,对消息服务的要求最主要的就是:

开源,能没有顾忌的的嵌套到公司的框架中

嵌套方便,开源的项目虽然可以修改,但是如果需要改动非常复杂,需要改动大量的源码就很痛苦。

成熟,能支撑商业应用。商业应用的一些条件,我想用过消息服务的都知道。下面引用的文章中也有相关说明。

我就着手这三个方便去查找合适的java平台的消息中间件。

下面有个文章,是我当时参考的。


原本地址:http://blog.youkuaiyun.com/mqboss/article/details/1659877

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

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

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

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

MantaRay:
也是比较活跃的一个JMS服务器,采用的是P2P模型,但是我不喜欢这种模型,对于JMS服务来说,很大的一个特点就是客户端可以不用永 远在线,比如在更新某一个客户端时需要暂停服务,等服务再度开启时,这段时间内所接收到的信息并不会丢失,保存在服务器上,所以我并不能看到P2P模型应 用在JMS服务器上的优势,况且采用JMS服务就是为了解除耦合,速度并不是唯一需要考量的事情。出于我不喜欢其所采用模型,并且在运行其所带的示例时都 出现了示例时都出现了问题,两个客户端互发互收,但是彼此之间都收不到消息,于是不予考虑。
ActiveMQ:
最近比较活跃的一个JMS服务器,主页上的介绍说在协议配置上可以选择支持NIO,但是我仔细看它所支持的协议,却并没有提到如何配置,并且在实际的测试中也并没有发现其有采用NIO的迹象,多连接一个Client端,服务器端就增多了一个线程。满足JMS 1.1,有多种方法进行持久化;本身不提供JNDI,也没有对JMX的支持,本身不带管理工具,采用Hermes进行管理(这个我会在以后提到),文档也相对较少。

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的主流开源项目有了初步的了解。但是这边文章日期比较早。我自己又去了解了这些开源项目。最后的出来的结果就是OpenJMS和ActiveMQ现在时JMS开源项目中,商业应用比较多的。而且OpenJMS也发展了很多,不再像上位仁兄说的那样。

我说下OpenJMS的支持吧:

openJms也支持了SUN的JMS API 1.1规范,支持消息队列,还支持消息传递的发布/订阅模式。
1、支持点对点、发布订阅消息模型
2、可靠的消息传输
3、支持同步、异步消息传输
4、jdbc持久存储
5、本地事物
6、身份认证
7、图形管理界面
8、基于xml的配置文件、
9、内存和数据库垃圾回收
10、支持TCP, RMI, HTTP and SSL 传输协议
11、可以与servlet容器结合,例如tomcat、jboss等
12、支持Applet
13、基于SQL92的消息过滤

我决定就从OpenJMS开始学习,如果的确不能支撑我们项目需求,再转ActiveMQ。




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值