XmlBlaster简介
XMLBlaster是一种免费的并且开放源码的、具有众多特性的消息中间件产品(message-oriented middleware以下简称MOM)。XMLBlaster是点对点的基于发布和订阅(publish and subscribe)模式的消息中间件服务器,它在发布者和订阅者之间起交换消息的作用,这些消息被描绘成用XML编码的元信息。它们可以是任何种类的信息,包括GIF图片、Java对象、Python脚本、XML数据、Word文档、纯文本等等。发布/订阅模式的特点是非直接的通过消息代理者通信,无连接,异步传输(通过轮流查询和对调机制)。如图1所示:
图1 XMLBlaster发布/订阅模式
使用XMLBlaster服务器的通信能够基于各种协议,如CORBA、RMI、XML-RPC等。其他像Email、Socket、Soap也能被嵌入其中。客户端可以选用最合适的一种,在XMLBlaster的客户端Perl、Python、Java、C++都是可以使用的。使用者可以用其最熟悉的语言来开发客户端。XMLBlaster还提供了浏览器回调框架,允许浏览器在一个持久的HTTP连接上接受立即的回调信号。归纳所得,XMLBlaster的主要特点为:
可以免费使用。
面向消息的中间件(point to point, publish/subscribe)。
支持多平台(服务器用Java编写)。
支持多协议 (CORBA, RMI, XML-RPC, Raw Socket, Email, Native Access)。
支持多客户端(java,C++/C,Python,PHP,Javascript,Perl,C#, Basic.net )
语言独立性。
可扩展性。
安全的系统独立性,支持鉴定、授权、消息拦截。
XmlBlaster体系结构
图2 XMLBlaster的应用体系结构
从图2可以清楚的看到作为消息中间件的XMLBlaster在整个应用环境中作用和地位。客户端无论用什么编写,总之它首先将消息按XML的格式发送到消息服务器,发送过程中所运用的协议可以在客户端程序中设定,主要有 IIOP、Email、HTTP、FTP等。当消息通过因特网到达XMLBlaster时,JACORB将其交给XMLBlaster引擎,XMLBlaster引擎在根据消息中的元数据即关键字Key把接收到的消息存放到一个树型结构中去,以便于管理和查找。XMLBlaster还有大量的外部接口,包括MIME类型接口(XML,Java,GIF,MPEG),数据库接口。可以实现对各类数据,应用程序的访问。同样的,客户端根据关键字Key向XMLBlaster订阅信息,XMLBlaster引擎也是根据消息中的元数据即关键字Key查找有无对应的信息内容,若有,则把信息回调给客户,若无,则等待。此后,若有该关键字Key关联的信息发布,则XMLBlaster会即时把信息回调给客户。从中也可看出,信息的发布和订阅是异步的。
XmlBlaster编程快速入门
编写客户端的主要流程可分为:获得输入参数、连接服务器、消息通信、断开连接。对于消息通信,xmlBlaster支持典型消息中间件的通信方式:主题订阅方式和点对点方式。主题订阅方式的通信围绕主题展开,对某个主题感兴趣的客户端可以向服务器声明,那么当服务器接收到与这个主题相关的消息时,就会消息转发给所有感兴趣的客户端;向服务器发布消息时,也需要在消息中注明主题。点对点方式根据用户名来通信,在发布消息时直接指定接收消息的客户端,服务器会直接将这条消息转发给指定的客户端。xmlBlaster支持异步连接方式。客户端在发送消息后可进行其它事务,不需要等待消息发送到目的地;也不需要向服务器询问是否有新消息,由服务器通知客户端。当然,需要向服务器说明通知客户端的是哪一个对象
全局参数
客户端的启动参数都保存到Global类中。一般地,一个客户端在连接到客户端之前,都应当创建一个全局参数对象,并将这个对象保存为客户端的实例对象。在创建后续的很多通信相关的对象时,都要用到这个对象。Global类能够创建服务器连接对象。
Global类接受的参数是字符串对的形式,如-参数名 参数值。常用的参数名有登录名session.name,例-session.name Jack;口令passwd,例-passwd xxxxx
连接服务器
由全局参数对象可以得到一个服务器连接对象。要真正连接到服务器,需要调用服务器连接对象的connect方法,而这个方法需要两个参数:连接服务质量对象和消息通知对象。
连接服务质量对象属于ConnectQos类,创建时必须指定全局参数对象。此外,还可以指定连接的用户名和口令。消息通知对象就是在服务器通知客户端接收消息时,需要通知的那个对象。消息通知对象需要实现一个update虚函数,以便服务器调用这个方法,将消息发送到客户端。客户端也需要在这个方法中,编写消息处理代码
消息单元
在发送消息之前,需要创建一个消息单元对象。消息单元类是MsgUnit。创建一个消息单元要指定PublishKey对象、消息体、PublishQos对象。创建PublishKey对象需要指定全局参数对象,如果是创建主题订阅方式下的消息,那么还需要指定主题信息。消息体就是消息的内容,一般就是一个字符串。创建PublishQos对象需要指定全局参数对象。如果是创建点对点方式下的消息,那么还需要调用addDestination方法来指定消息的目的地。
消息通信
无论是主题订阅方式还是点对点方式,消息的发送都调用服务器连接对象的publish方法。这两种通信方式的区别主要体现在构造消息单元的时候。
订阅主题需要调用服务器连接对象的subscribe方法,这个方法需要指定SubscribeKey和SubscribeQos对象。前者通过全局参数对象和主题信息来构造,后者用全局参数对象就可以创建了。
断开连接
调用服务器连接对象的disconnect方法即可断开客户端与服务器的连接。这个方法需要指定一个DisconnectQos对象,可以用全局参数对象来创建。
Java客户端开发流程
客户端使用到的包在xmlBlaster.jar文件中都能找到,因此需要把这个文件配置到CLASSPATH环境变量中。其中主要使用org.xmlBlaster.util和org.xmlBlaster.client两个包.
1. 构造一个Global变量,将参数传入该变量。参数格式参见”全局参数”。如果需要远程连接到服务器,可以将服务器IP作为参数传入,例如-bootstrapHostname xxx.xxx.x.x。
2. 调用Global对象的getXmlBlasterAccess方法,可以得到一个I_XmlBlasterAccess接口,这是与服务器连接的对象。
3. 调用该接口的connect方法连接服务器,需要指定ConnectQos对象和一个实现I_Callback接口的对象。I_Callback接口只有一个update方法,消息处理代码可以编写在这个方法中。
4. 调用该接口的subscribe方法订阅主题。
5. 调用publish方法发布消息。
a) 构造消息单元,指定PublishKey和PublishQos对象。主题信息在构造PublishKey对象时指定。
b) 如果是点对点方式,需要在PublishQos中加入目的地信息,也就是Destination对象。一般是先构造一个SessionName(Global, String username)对象,然后将它作为参数来构造Destination对象。
c) 构造MsgUnit对象和发布消息的进一步信息还可以参见“消息单元”和“消息通信”。
6. 退出客户端时,调用该接口的disconnect方法断开连接,指定DisconnectQos对象。
XmlBlaster消息缓存
Xmlblaster在默认情况下是利用HSQLDB来进行系统消息队列的保存或交换消息,通过更改Xmlblaster安装目录的config目录下的xmlBlaster.properties文件可以进行默认数据库的修改操作。
打开xmlBlaster.properties,
1. 增加对应的消息持久化插件的达梦数据库选项。
JdbcStorage[DM] =org.xmlBlaster.util.queue.jdbc.JdbcQueueCommonTablePlugin,
url= jdbc:dm://localhost:12345/数据库名,
user=连接数据库用户名,
password=连接数据密码,
connectionPoolSize=5,
connectionBusyTimeout=90000,
maxWaitingThreads=300,
tableNamePrefix=XB_,
entriesTableName=ENTRIES,
colNamePrefix=XB_,
dbAdmin=true,
configurationIdentifier=DM
在这里必须对configurationIdentifier=DM进行配置,否则找mapping的时候,就会默认去DM驱动中获取,取回来的带中文”达梦数据库管理系统”,导致下面mapping[中文]需要编码一致的问题。
2. 更改消息存储插件和消息队列插件的数据选项
StoragePlugin[JDBC][1.0]=${JdbcStorage[DM]}
QueuePlugin[JDBC][1.0] = ${JdbcStorage[DM]}
3. 进行自动建表配置
JdbcDriver.mapping[DM]=string=VARchar(128),longint=BIGINT,boolean=char,blob=BLOB,blobVarName=datablob
create TABLE XB_ENTRIES (XB_dataId BIGINT , queueName VARchar(128) , prio integer, flag VARchar(128), durable char, XB_byteSize BIGINT, datablob BINARY, PRIMARY KEY (XB_dataId, queueName))
通过以上步骤就可以利用达梦数据库来支持XmlBlaster进行消息缓存。客户端在服务器断开连接后,客户端会在内存里面缓存队列,以下是对应的参数设置。
queue/connection/defaultPlugin=RAM,1.0 内存队列
queue/connection/defaultPlugin=CATCH,1.0 持久化保存于数据库
queue/connection/maxEntriesCache = 1 客户端消息内存缓存
queue/connection/maxEntries = 10000000 客户端消息数据库中最大缓存
总结 利用XmlBlaster可以很容易实现不同操作系统与不同语言进行消息交换,通过达梦数据库来支持消息缓存机制,可以进行数据复制,消息缓存等不同的异步消息应用。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
达梦数据库携手赛凡科技全面启动战略合作
2015年10月27日,知名国产数据库厂商北京达梦数据库技术有限公司和国内自主创新存储厂商北京赛凡智慧科技有限公司战略合作协议签约仪式在北京举行。
-
甲骨文进军SDN 发布最新Netra网络服务器产品
本周,在西班牙巴塞罗那举办的2015世界移动通信大会上,甲骨文展出了4款新系统和网络产品。
-
服务器市场上的跳高理论
随着互联网和移动浪潮的兴起,大数据和云计算等技术将IT行业推到了竞技场的中央,而服务器作为最关键的基础设施自然也就成为了“众矢之的”。
-
甲骨文携手银海软件提供社保行业解决方案
四川久远银海软件有限公司携手甲骨文,通过Oracle Tuxedo,现可为社保行业用户提供全面的行业解决方案