我考慮在公司的項目中采用JMS來(lái)降低服務(wù)器之間的耦合性,但為了降低成本,商業(yè)軟件是不考慮的,于是只能在開(kāi)源的并且對商業(yè)友好的JMS服務(wù)器中選擇一個(gè)了。選擇條件主要基于:
準備進(jìn)行選擇的JMS服務(wù)器有:OpenJMS、UberMQ、ActiveMQ、MantaRay、JORAM
OpenJMS:老牌的JMS服務(wù)器了,也是我最早知道的開(kāi)源JMS服務(wù)器,不過(guò)只支持JMS 1.02,已經(jīng)很長(cháng)時(shí)間沒(méi)有更新了,因此不予考慮。
UberMQ:采用NIO的JMS服務(wù)器,以前我學(xué)習NIO的時(shí)候看過(guò)它的代碼,寫(xiě)的蠻不錯的,也支持JMS 1.1。由于采用了NIO,所以具有很高的彈性,在滿(mǎn)足項目的性能需求上沒(méi)有什么問(wèn)題;本身也提供JNDI服務(wù),但是遺憾的是我bind其他類(lèi)型的數據時(shí)會(huì )出錯;提供admin和viewer兩個(gè)管理工具,但是在管理工具里不能創(chuàng )建ConnectionFactory和Destination并綁定到JNDI;文檔不太完整;最頭痛的對于持久化支持不好,如果關(guān)閉JMS服務(wù)器再開(kāi)啟,所有保存在JMS中的信息就全部丟失了,這點(diǎn)沒(méi)有辦法滿(mǎn)足商業(yè)應用所需的穩定性。
ActiveMQ:最近比較活躍的一個(gè)JMS服務(wù)器,主頁(yè)上的介紹說(shuō)在協(xié)議配置上可以選擇支持NIO,但是我仔細看它所支持的協(xié)議,卻并沒(méi)有提到如何配置,并且在實(shí)際的測試中也并沒(méi)有發(fā)現其有采用NIO的跡象,多連接一個(gè)Client端,服務(wù)器端就增多了一個(gè)線(xiàn)程。滿(mǎn)足JMS 1.1,有多種方法進(jìn)行持久化;本身不提供JNDI,也沒(méi)有對JMX的支持,本身不帶管理工具,采用Hermes進(jìn)行管理(這個(gè)我會(huì )在以后提到),文檔也相對較少。
MantaRay:也是比較活躍的一個(gè)JMS服務(wù)器,采用的是P2P模型,但是我不喜歡這種模型,對于JMS服務(wù)來(lái)說(shuō),很大的一個(gè)特點(diǎn)就是客戶(hù)端可以不用永遠在線(xiàn),比如在更新某一個(gè)客戶(hù)端時(shí)需要暫停服務(wù),等服務(wù)再度開(kāi)啟時(shí),這段時(shí)間內所接收到的信息并不會(huì )丟失,保存在服務(wù)器上,所以我并不能看到P2P模型應用在JMS服務(wù)器上的優(yōu)勢,況且采用JMS服務(wù)就是為了解除耦合,速度并不是唯一需要考量的事情。出于我不喜歡其所采用模型,并且在運行其所帶的示例時(shí)都出現了示例時(shí)都出現了問(wèn)題,兩個(gè)客戶(hù)端互發(fā)互收,但是彼此之間都收不到消息,于是不予考慮。
JORAM:支持JMS 1.1,可以持久化到文件,本身提供JNDI服務(wù)和提供對JMX的支持,自帶的管理工具可以添加ConnectionFactory和Destination并綁定到JNDI,這點(diǎn)對實(shí)現動(dòng)態(tài)管理來(lái)說(shuō)非常有用;文檔非常完備,100多頁(yè)的PDF,包含了各種配置和調整信息。其穩定性考慮的尤其好,不僅考慮到JMS服務(wù)器的集群,甚至連JNDI的集群也考慮進(jìn)去(盡管暫時(shí)對我而言還用不上),這點(diǎn)對于商業(yè)應用而言應該會(huì )有加分。
ActiveMQ是Apache License,JORAM是LGPL,這兩者對于商業(yè)應用都是友好的;UberMQ和MantaRay采用是Dual License,UberMQ的Dual License是只要你不分發(fā),就可以允許使用;而MantaRay是商業(yè)使用需要應用一個(gè)商業(yè)的License。
比較上面的這些JMS服務(wù)器,最終我是選擇了JORAM,其滿(mǎn)足了我的絕大部分要求,唯一比較遺憾的是其采用傳統的IO模型,每連接一個(gè)Client端會(huì )在服務(wù)器端增加兩個(gè)線(xiàn)程,這點(diǎn)稍微影響了服務(wù)器的彈性。不過(guò)考慮到我們的項目應用,這點(diǎn)暫時(shí)可以不用考慮,實(shí)在壓力過(guò)大了,最多到時(shí)候采用JMS集群?jiǎn)h:)
聯(lián)系客服