级别: 初级 陈隽伟 (chenjunw@cn.ibm.com), , 全球化认证实验室,IBM中国软件开发实验室
2004 年 2 月 01 日 本文介绍了如何使用WBI Message Broker作为中心消息流转服务器,将MQ与其它厂商的消息中间件产品进行集成,并根据具体业务需求在WBI Message Broker上开发部署相关应用。
简介:本文介绍了如何使用WBI Message Broker作为中心消息流转服务器,将MQ与其它厂商的消息中间件产品进行集成,并根据具体业务需求在WBI Message Broker上开发部署相关应用。
本文涉及到的软件产品主要有下面几种:
- Windows 2000 Server
- IBM DB2 UDB V8.1
- IBM WebSphere MQ V5.3
- IBM WebSphere Business Intelligence Message Broker V5.0
通过本文,读者可以了解到:
- 来自不同厂商的消息中间件产品互连的典型应用场景
- 如何安装配置WBI Message Broker的开发运行环境
- 如何安装配置WebSphere MQ,使之作为JMS 服务器
- 如何开发部署WBI Message Broker应用
应用场景:在实际应用中,我们常常遇到这样一种情形。客户的信息系统在应用之初已经采用了一家厂商的产品;后来, 在进行系统扩展或是升级的时候,可能会考虑选用另外一家厂商的产品。这时候,客户通常最为关心的是如何尽量保护其原有投资,这就会碰到不同厂商的中间件产品之间如何进行集成的问题。
下列应用场景是在客户那里经常会遇到的情况:
客户所采用的消息中间件种类很多,既有IBM WebSphere MQ,也有另外两家消息中间件厂商的产品B和C。现在, 客户希望三家厂商的消息中间件能够实现无缝连接,保证消息能够在诸产品之间高效,无损地顺利流转;并且希望能够在这样复杂的运行环境中快速的设计,开发,部署消息流转相关的应用。
解决方案:我们针对该应用场景,所采用的典型解决方案是由WBI Message Broker作为中心消息流转服务器,承担消息接收,处理,流转,发送的任务。由于WBI Message Broker是构建在MQ的基础之上的,所以消息中间件厂商B,C的产品将通过MQ与WBI Message Broker进行通信,通信采用业界共同制定的JMS标准。(本文假设读者对JMS的相关内容有一定程度地了解。)
下图是解决方案大致的框架图:
下面,我们将通过这个例子,详细的介绍这个解决方案相关的开发,配置和部署步骤。
主要包括三部分:
- 配置WBI Message Broker
- 配置MQ
- 在WBI Message Broker中开发部署消息流应用
配置WBI Message Broker:
这部分涉及到实现这个例子的一些前期准备工作,主要是在WBI Message Broker安装配置过程中一些必须的步骤和需要注意的一些地方。
本文中所述的解决方案中WBI Message Broker是按照下列的步骤来进行安装的:
操作系统:Windows 2000 Server (SP3或是SP4)
- 安装DB2 UDB V8.1 + FixPack2
- 安装WebSphere MQ V5.3
- 安装 JDK 1.3.1
- 安装 MDAC 2.7 + SP1
- 安装WebSphere Business Integration Message Broker V5.0 + FixPack1
以上这些软件是安装配置WBIMB所必需的环境,其它还有一些可选组件可供选择安装,如:
IBM Agent Controller V5.0
在安装上述软件的过程中,有很多安装时选项需要选择,可参看相关产品文档,此处不赘述。
安装成功后,为了能够在WBI Message Broker正常开发部署消息流转应用,我们还需要先对其进行配置.
首先需要了解下面几个重要的概念:
1. 配置管理器(Configuration Manager):该组件负责WBI Message Broker运行时中介器域中所有的组件和资源的配置管理。
2. 中介器域(Broker Domain):该组件将包含一组中介器,它们共享相同的配置,并且由配置管理器进行集中管理。
3. 中介器(Broker):该组件将在服务器上以一个系统服务的形式存在,它负责维护运行在其中的所有消息流程序。
4. 执行组(Execution Group):运行在一个中介器中的所有消息流将被划分在不同的执行组中运行。在物理上,不同的执行组将运行在进程的不同地址空间中或是不同的进程中以保证彼此运行不受影响。
理解了上述几个基本概念之后,我们需要进行一些最基本的配置:
1. 创建配置数据库
我们需要为配置管理器创建配置数据库WBRKCMDB,为中介器创建配置数据库WBRKBKDB。(这里也可以将数据库命名为其它名字)
步骤如下:
1. 从开始菜单出发,打开DB2的控制中心
2. 在控制中心中不断展开对象树,直至找到数据库的一级,选中数据库对象,单击右键,选择根据向导创建数据库。
3. 在数据库名字中填入WBRKCMDB/WBRKBKDB,其余创建选项可以选择默认值。
4. 单击完成。
2. 为配置数据库创建ODBC数据源
我们需要为配置数据库创建ODBC数据源,步骤如下:
1. 从 开始'设置'控制面板'管理工具,双击ODBC管理器。
2. 选择系统DSN页,为上面创建的两个配置数据库分别创建数据源。
3. 在驱动程序选项中选择 IBM DB2 ODBC DRIVER
3. 调整优化配置数据库参数
本步可选,在这里将调整配置数据库的相关参数,以期提高性能。步骤如下:
1. 打开DB2的控制中心
2. 不断扩展对象树直到找到相应的配置数据库,右键选择配置。
3. 在配置界面中选择性能页,将其中参数"数据库堆大小"(Database Heap Size)设为900
4. 单击完成。
4. 命令行方式创建配置管理器
在命令行下使用mqsicreatecfgmgr 命令来创建配置管理器,具体格式参考相关文档。
这里举个例子:
mqsicreatecfgmgr -q WBRK_QM -n WBRKCMDB
|
这当中, WBRK_QM是与配置管理器相绑定的MQ队列管理器的名称, WBRKCMDB是之前创建的配置管理器配置数据库的名称.
5. 命令行方式创建中介器
在命令行下使用mqsicreatebroker 命令来创建配置管理器,具体格式参考相关文档。这里举个例子:
mqsicreatebroker WBRK_BROKER -q WBRK_QM -n WBRKBKDB
|
这里的WBRK_BROKER是我们所创建的中介器的名字, WBRK_QM则是该中介器将要使用的MQ队列管理器的名称, WBRKBKDB则是之前创建的中介器配置数据库的名称.
6. 手动启动相关服务
配置管理器创建成功后,会自动创建成一个Windows服务,每个中介器创建成功后,也会自动创建成一个Windows服务,我们需要先启动配置管理器的服务;再启动相关中介器的服务.
7. 将中介器域连接至相应的队列管理器
在创建配置管理器的过程当中,我们会在服务器上的MQ资源管理器中创建一个队列管理器与之绑定。
现在,我们需要将中介器域连接到这个队列管理器,这当中需要填写所绑定的队列管理器名,监听的端口号等参数。
完成上述步骤之后,我们就做好了开发部署消息流应用程序的前期准备工作。
配置MQ:
WBI Message Broker是建立在MQ的基础之上运行的,而其它厂商的消息中间件产品则是遵循JMS标准,作为JMS客户端与MQ实现互连。 所以,我们需要对MQ进行配置,使之成为符合这个例子需求的JMS服务器。
具体的步骤如下:
1. 在安装MQ的过程中选择自定义安装模式,并确保安装JMS所需的Java jar包支持如下图:(缺省安装未包含)
安装后, 会在%MQ_INSTALLL_HOME_PATH%下出现java子目录, 其中分为bin和lib两部分, 通过这些工具程序和库文件, 我们就可以对MQ这个JMS服务器进行各种配置管理, 并且能够开发我们自己的JMS客户端应用.
2. 确认MQ服务已启动。可通过MicroSoft windows控制面板中管理工具下的服务控制台确认。如下图:
3.从程序菜单启动MQ 资源管理器。
4.通过MQ资源管理器创建一个通道。
此次例子中建立名为JAVA.CHANNEL的通道,其他参数缺省设置。
5.通过MQ资源管理器创建三个本地队列
- LOCAL_SEND_A这个队列将模拟MQ作为消息发送端
- LOCAL_RECV_B这个队列将模拟厂商B的消息接收端
- LOCAL_RECV_C这个队列将模拟厂商C的消息接收端
如下图:
6.更新MQ安装目录下与JMS配置相关的文件:JMSAdmin.config
1) 此文件位于%MQ_INSTALLL_HOME_PATH%\Java\bin
2) 强烈建议更改前备份原文件或将该文件拷贝入其他目录再进行更改。
3) JMSAdmin.config主要定义了以下这些属性:
- JNDI服务的提供商(INITIAL_CONTEXT_FACTORY)
- JNDI服务初始上下文下的URL模式(PROVIDER_URL)
- 安全认证模式(SECURITY_AUTHENTICATION)
- JNDI服务的安全认证口令(PROVIDER_USERDN, PROVIDER_PASSWORD)
- 是否使用初始目录上下文或是初始上下文USE_INITIAL_DIR_CONTEXT
还有一些不大常用的配置选项。
4) 这里的例子中我们主要设置了前三个属性, 其它属性读者视需要自行设置。
INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory
PROVIDER_URL=file:/ D:/MQ/queues
SECURITY_AUTHENTICATION=none
|
并在%MQ_INSTALLL_HOME_PATH%\Java\bin目录下新建configbackup目录,将JMSAdmin.config文件拷贝到bridgeconfig目录下再进行更改。更改后的配置文件读者可参见附件一JMSAdmin.config.
7. 下面再来介绍配置JMS服务器过程中一个重要的工具: JMSAdmin.bat
1) 这个批处理文件用于启动MQ的JMS命令行管理界面
2) 主要设置启动JMS命令行管理界面所需环境变量
主要环境变量包括:
set LIB_PATH=C:\Program Files\IBM\WebSphere MQ\Java\lib
set DEMO_CLASSPATH=%LIB_PATH%\com.ibm.mq.jar
set DEMO_CLASSPATH=%DEMO_CLASSPATH%;%LIB_PATH%\com.ibm.mqbind.jar
set DEMO_CLASSPATH=%DEMO_CLASSPATH%;%LIB_PATH%\com.ibm.mqjms.jar
set DEMO_CLASSPATH=%DEMO_CLASSPATH%;%LIB_PATH%\fscontext.jar
set DEMO_CLASSPATH=%DEMO_CLASSPATH%;%LIB_PATH%\jms.jar
set DEMO_CLASSPATH=%DEMO_CLASSPATH%;%LIB_PATH%\jta.jar
set DEMO_CLASSPATH=%DEMO_CLASSPATH%;%LIB_PATH%\connector.jar
set DEMO_CLASSPATH=%DEMO_CLASSPATH%;%LIB_PATH%\ldap.jar
set DEMO_CLASSPATH=%DEMO_CLASSPATH%;%LIB_PATH%\providerutil.jar
set DEMO_CLASSPATH=%DEMO_CLASSPATH%;%LIB_PATH%\jndi.jar
set DEMO_CLASSPATH=%DEMO_CLASSPATH%;%LIB_PATH%\rmm.jarset DEMO_CLASSPATH=%DEMO_CLASSPATH%;C:\jdk1.3.1_09\jre\lib\rt.jar
set CLASSPATH=%CLASSPATH%;%DEMO_CLASSPATH%;.
|
这个例子中更改后的批处理文件参见附件二 JMSAdmin.bat。
8. 接下来就是MQ相关配置中最关键的一步, 使用JMSAdmin.bat 完成和本例有关的配置.
1)进入MQ的JMS命令行管理界面绑定MQ的JMS Factory以及JMS本地队列
- 开启Microsoft Windows的Dos窗口(cmd.exe)
- 进入MQ安装目录下的java目录下的bin目录
运行JMSAdmin.bat并通过-cfg参数指定JMSAdmin.config文件
这个例子中输入:
%MQ_INSTALLL_HOME_PATH%\Java\bin>jmsadmin -cfg .configbackup\jmsadmin.config
|
运行后进入界面如下图:
- 通过dis ctx命令查看此时的内容:
- 在上图所示界面中输入:DEFINE XAQCF(jmsconnection.mqTestQCFXA)此命令用于绑定JMS Factory。绑定成功与否可通过在上述界面中输入dis ctx察看。
- 在上图所示界面中输入:DEFINE Q(jmsconnection.mqSendA) QUEUE(LOCAL_SEND_A) 用于绑定MQ本地发送队列
DEFINE Q(jmsconnection.mqRecvB) QUEUE(LOCAL_RECV_B) 用于绑定为连通消息中间件B服务的MQ本地接收队列
DEFINE Q(jmsconnection.mqRecvC) QUEUE(LOCAL_RECV_C) 用于绑定为连通消息中间件C服务的MQ本地接收队列
- 执行完上述步骤,通过dis ctx命令查看结果如下:
- 利用End命令退出JMS Admin界面
开发部署消息流(Message Flow)应用:
在完成了上面的一系列配置之后,WBI Message Broker的开发运行环境均已准备就绪,我们现在可以使用WBI Message Broker Toolkit来开发我们的消息流应用了。
这个例子中的客户需求是这样的:有一批量的消息从一MQ队列发送,先送至中心消息流转服务器,在此分别进行简单的业务逻辑处理后再分别传送至厂商B和厂商C的消息中间件产品,由相应的消息中间件接收。WBI Message Broker在这个应用当中承担消息流转和业务逻辑处理工作。
下面是使用WBI Message Broker Toolkit开发应用的步骤:
1. 打开WBI Message Broker Toolkit,新建一个Message Flow项目,输入项目的名字。
2. 接下来,我们在该Message Flow项目中新建一个Message Flow。选择新建的项目,右键选择New->Message Flow,输入该Message Flow的名字。双击该文件,将会进入该消息流的编辑界面。我们可以在这里定制消息流程,编写处理消息的逻辑代码。窗口左边的Built-in nodes是WBI Message Broker Toolkit所内建提供的各种类型的Adapter和逻辑处理单元。我们把这个例子中所需要的MQInput,MQOutput,Trace,Compute等各种类型的结点按照设计消息流的要求拖放到编辑窗口中。
3. 为各个结点设置属性。
这里,我们将为一些主要的结点设置相关的属性。
MQInput结点:凭借这类结点的帮助,我们可以将某个MQ消息队列中的消息导入到消息流中。 这里需要设置Basic属性框中的Queue Name:WBRK_QM, 而Default属性框中的Message Domain则设为XML。
MQOutput结点:这种结点可以帮助我们将消息流中的消息传送到某个MQ的消息队列中。和MQInput结点类似,这里Basic属性框中的Queue Name也设置为WBRK_QM。
Check结点:这类结点在消息流中承担着很重要的作用,我们可以在这个结点中观察消息的属性,分析它的结构,根据分析的结果进一步分派消息,可视情况使用。
Trace结点:这类节点对于开发过程中调试消息流程序至关重要,我们可以通过它记录下消息流转到该点时发生的一切。
如下图,这里我们选择将trace的信息保存在某磁盘文件中。
TryCatch结点:如果希望你的消息流应用足够健壮,能够捕捉处理各种异常,不妨试试这种结点。
Compute结点:这是消息流转应用的大脑,集中了消息流应用中核心的应用逻辑。它通过执行ESQL,一种Message Broker的逻辑处理语言,来完成各种业务逻辑,这个会在下文中给出具体的例子。
4. 为添加的各个结点之间添加连接。
各个结点之间通过Connection关联起来,Connection有三种类型,Out,Failure和Catch。
Out: 如果消息流中的消息流转正常,则会通过这种Connection传送到目的结点。
Catch: 如果消息流转过程中发生异常,则会通过这种Connection传送到异常处理结点。
Failure: 如果消息流转过程中发生错误,则会通过这种Connection传送到相应的错误处理结点。
下图是设计好的消息流程图:
5. 为计算结点添加逻辑代码。
Compute结点是一类特殊的结点,我们可以在其中添加ESQL代码,实现特别的业务逻辑。如何打开Compute结点的代码编辑窗口呢? 我们在设计窗口中选中Compute结点,右键'Open ESQL。ESQL的编辑窗口会被打开,我们将在这里编写ESQL代码。
下图是例子中计算结点的ESQL代码,它将接收上一个结点传送过来的消息,拷贝消息头,并在消息体后添加字母"B",生成新的消息后继续向后继结点传送。
6. 编译,打包,部署应用。流程开发完毕,接下来我们需要先编译该流程,再进行打包,最后部署到我们的WBI Message Broker服务器上。
下图显示了在编译好流程之后,需要新建一个Message Broker Archive文件对消息流进行打包,生成一个BAR文件。
打包之后,我们将其部署到WBI Message Broker服务器上。
下图显示了如何连接至配置管理器。
连接成功后,我们就可以在WBI Message Broker Tookit中部署新的流程或是操作已部署的流程。
之前我们已经生成了一个消息流打包文件,在导航器中选中该文件,右键->Deploy File,如下图选择目标执行组,单击确定后查看部署结果,如果显示部署成功,则消息流已经部署到服务器并且正常运行。
此时,读者可以自行从LOCAL_SEND_A放入消息,查看LOCAL_RECV_B和LOCAL_RECV_C中是否收到处理后的消息;这时,消息中间件B,C就可以作为JMS客户端到LOCAL_RECV_B和LOCAL_RECV_C来读取消息,再进行进一步的处理了。由于这部分内容因不同厂商的具体产品而异,具体的配置请参考所选用产品的相关文档。
小结:本文通过一个简单的例子,讲述了如何应用WBI Message Broker作为中心服务器,承担消息流转和业务逻辑处理的重任,集成了MQ和其它厂商的消息中间件产品。读者可以根据具体需求设计相应的消息流应用。
关于作者
对本文的评价
|