所以在本部分,将会向用户介绍如何配置TXSeries与MQ遵循XA标准通信的指令,并编译示例程序进行测试。
参阅:
1. XA简介
交易管理器(TXSeries)如何与不同的资源管理器(包括MQ、DB2和Oracle)通信呢?XA作为被X/Open组织定义的规范,描述了在交易管理器和一个或多个资源管理器之间进行交易协调、委托和恢复的协议。它描述了资源管理器必须做什么来支持交易访问。
2. 准备
本部分将聚焦于如何配置TXSeries与MQ的指令,并编译两个示例程序”cics_mqput“和”cics_mqget“来向队列中放入消息,然后从队列中读取消息。关于MQ API和MQ命令与选项的细节信息,可以参阅MQ Knowledge Center——那不是本部分的重点。
注意第三节第三步,第四节第七步和第五节第二步,不同平台的指令间会有差异——更多的细节信息将在稍后提及。
在配置TXSeries和MQ之前,确保已经在客户端和服务器都安装了MQ。本部分服务器和客户端的地址如下:
服务器地址:9.119.154.229
客户端地址:9.119.154.34
3. 服务器配置
首先,需要创建一个队列管理器来管理队列,队列是消息的容器。
(1)创建队列管理器
语法
crtmqm <queue manager name>
可以命名自己的队列管理器。
例如:crtmqm QUE1
参阅:
(2)启动队列管理器
语法
strmqm <queue manager name>
例如:strmqm QUE1
参阅:
现在就可以从TXSeries提供的示例文件中添加队列管理器对象(例如queue,process)了,这个示例文件位于”<CICS INSTALL DIR>/cics/examples/RM_support/WMQ“目录下,名为”cics_mqsamp.mqsc“。将其从客户端机器复制到服务器机器。
(3)创建队列管理器对象
语法
runmqsc <queue manager name> < <path of “cics_mqsamp.mqsc” file>
例如:runmqsc QUE1 < cics_mqsamp.mqsc
这条命令用于向队列管理器发布MQSC命令。MQSC命令可以运行管理任务。例如,可以定义、修改和删除本地队列(local queue)对象。在”cics_mqsamp.mqsc“文件中定义了一个从”cics_mqput“接收消息的名为CICS.LOCAL.QUEUE的本地队列 。在这个队列的定义中,有个TRIGGER参数,它可以指定是否传递消息到一个被INITQ指定的初始化队列(initiation queue),并触发一个被PROCESS指定的应用程序(Linux不支持这个触发工作)。初始化队列和PROCESS的定义在后续的语句中。
在我们的示例中,每次CICS.LOCAL.QUEUE接收到被应用程序”cics_mqput(交易id是MPUT)”发送的一条消息,会将这条消息传递到CICS.TRIG.QUEUE,然后应用程序”cics_mqget(交易id是MGET)”会从初始化队列获取消息。如果是在AIX系统中,交易”MGET“将会自动被触发来读取消息。
参阅:
关于runmqsc:
关于队列定义和参数:
(4)在服务器上创建一个本地用户(可选)
为了获得连接服务器的权限,应该在mqm组创建一个用户,或者直接使用mqm用户。客户端机器将使用这个本地用户访问服务器。使用下面的命令来创建一个属于mqm组的用户:
语法
useradd -g mqm <local user id>
例如:useradd -g mqm test1
(5)运行MQSC命令
除了像步骤3那样通过一个文件来运行MQSC外,也可以在指定队列管理器上使用”runmqsc“来直接运行键入的MQSC命令。
语法
runmqsc <queue manager name>
从步骤6到步骤8,将通过配置映射(mapping)的方式使客户端能够访问服务器。
(6)映射用户id或客户端地址到服务器本地用户id
在配置映射之前,客户端没有权限通过XA协议连接服务器——服务器不信任未知的地址和用户。有两种方式可以使服务器识别客户端。一种是将客户端机器的地址映射到服务器上的本地用户(步骤4配置过的)或者用户mqm。另一种是将客户端cics组中的用户映射到服务器本地用户。在本例中,使用用户cics。
用户可以随意选择哪种方式。
a.地址映射
语法
SET CHLAUTH(SYSTEM.DEF.SVRCONN) TYPE(ADDRESSMAP)
ADDRESS(‘<client ip>’)
USERSRC(MAP) MCAUSER(‘<server local user id>’) ACTION(ADD)
这条命令会添加一条在channel SYSTEM.DEF.SVRCONN上将客户端ip地址映射到服务器本地用户的认证记录。这个channel是自动提供的,但是不推荐使用这个channel——此处仅仅为了方便。
例如:
SET CHLAUTH(SYSTEM.DEF.SVRCONN) TYPE(ADDRESSMAP)
ADDRESS(‘9.119.154.34’)
USERSRC(MAP) MCAUSER(‘test1’) ACTION(ADD)
b.用户映射
语法
SET CHLAUTH(SYSTEM.DEF.SVRCONN) TYPE(USERMAP) CLNTUSER(‘<client user id>’) USERSRC(MAP) MCAUSER(‘<server local user id>’) ACTION(ADD)
这条命令会添加一条在channel SYSTEM.DEF.SVRCONN上将客户端用户映射到服务器本地用户的认证记录。
例如:
SET CHLAUTH(SYSTEM.DEF.SVRCONN) TYPE(USERMAP) CLNTUSER(‘cics’) USERSRC(MAP) MCAUSER(‘test1’) ACTION(ADD)
参阅:
关于channel:
关于SET CHLAUTH:
(7)添加一条不阻塞任何用户的认证记录
语法
SET CHLAUTH(SYSTEM.DEF.SVRCONN) TYPE(BLOCKUSER) USERLIST(‘nobody’)
这条命令可以保证没有用户会被阻塞。
(8)关闭应用程序连接队列管理器的用户名和密码认证
在完成本步骤前,队列管理器将检查应用程序是否有权限请求连接。现在将关闭这个功能。
首先,修改客户端程序的认证要求为”none“。
ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS)
CHCKCLNT(NONE)
然后,在修改后更新security。
REFRESH SECURITY TYPE(CONNAUTH)
到此已经完成了所有的MQSC命令,输入”END“退出。
参阅:
关于ALTER AUTHINFO:
关于REFRESH SECURITY:
(9)启动MQ监听器
运行一个监听器进程来监听多种通信协议上的远程请求。
语法
runmqlsr -m <queue manager name> -t tcp -p <port number> &
端口号必须没有被占用,可能需要关闭防火墙,或打开刚刚指定的端口。
例如:
runmqlsr -m QUE1 -t tcp -p 54321 &
参阅:
现在已经完成了所有的服务器端配置,下面转向客户端配置。
4. 客户端配置
以下文章点击率最高
Loading…