TXSeries入门系列文章12

所以在本部分,将会向用户介绍如何配置TXSeriesMQ遵循XA标准通信的指令,并编译示例程序进行测试。

参阅:

 

1. XA简介

交易管理器(TXSeries)如何与不同的资源管理器(包括MQDB2Oracle)通信呢?XA作为被X/Open组织定义的规范,描述了在交易管理器和一个或多个资源管理器之间进行交易协调、委托和恢复的协议。它描述了资源管理器必须做什么来支持交易访问。

2. 准备

本部分将聚焦于如何配置TXSeriesMQ的指令,并编译两个示例程序”cics_mqput“和”cics_mqget“来向队列中放入消息,然后从队列中读取消息。关于MQ APIMQ命令与选项的细节信息,可以参阅MQ Knowledge Center——那不是本部分的重点。

注意第三节第三步,第四节第七步和第五节第二步,不同平台的指令间会有差异——更多的细节信息将在稍后提及。

在配置TXSeriesMQ之前,确保已经在客户端和服务器都安装了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提供的示例文件中添加队列管理器对象(例如queueprocess)了,这个示例文件位于”<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(交易idMPUT)”发送的一条消息,会将这条消息传递到CICS.TRIG.QUEUE,然后应用程序”cics_mqget(交易idMGET)”会从初始化队列获取消息。如果是在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…

     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营