本主题介绍如何配置通过 MQ 传输发送和接收消息的消息代理。章节目录:
MQ 前提条件
Jar 文件
队列分配
当通过队列交换通讯报文时,我们假设客户端应用程序向目标队列发送请求,而服务器应用程序从队列接收消息。然后,服务器将回复消息发送到第二个队列,供客户端接收。在这种情况下,消息代理充当客户端和服务器之间的“中间人”,这需要在消息提供者上添加两个队列,以促进调解。Parasoft 代理从客户端放置消息的位置接收消息,记录消息内容(如果启用了记录功能),然后将消息放到服务器将接收它的队列中。类似地,服务器将消息发送到一个队列,代理进行接收并录制(如果启用了录制功能),然后将它放回客户端期待回复响应的队列中。
因此,需要分配两个额外的队列,其中之一是:
- 调整客户端应用程序,以便在这两个新队列上通信(使用为它们配置的代理连接)。
- 调整服务器应用程序以使用其他两个队列。
只需要修改两个应用程序队列中的一个。
指定 MQ 设置
指定 MQ 设置,如下所示:
- 在代理连接设置对话框中选择 MQ 作为代理类型。
如果您在此面板中定义客户端和服务器队列(而不是像Using Global Queue Managers中所述,引用之前定义的队列管理器),请在本地设置区域中输入服务器详细信息。
指定客户端和服务端队列。您可以在此面板中输入每个连接的设置(通过本地设置选项),或者引用在服务器级别定义的全局队列管理器(详情请参阅Using Global Queue Managers)。
SSL
您可以在 Virtualize 服务器上定义一个 MQ 队列,其中包括服务器连接选项卡中的 SSL 配置,并通过从菜单中选择全局队列管理器将设置应用到代理。本地设置配置中不支持 SSL 配置。
- Put 队列始终是 AUT/client 放置/发送请求消息的地方。Get 队列是 client/AUT 获得响应消息的地方。
Virtualize 将捕获发送给客户端 Put 队列的请求消息,然后将其转发到服务器 Put 队列,以进行处理。 服务器 Get 队列是服务器将在其上放置响应消息的队列(处理请求消息之后)。这些消息将被捕获并转发到客户端 Get 队列。
- 当消息代理启动时,它将创建两个监听器。在客户端 Put 队列上创建一个监听器;这一个从客户端 Put 队列中获取消息,并将它们放在服务器 Put 队列中。在服务器 Get 队列上启动第二个监听器;它将消息从服务器 Get 队列移动到客户端 Get 队列。
如果希望自定义代理打开队列或将消息放入服务器 put 队列时使用的选项标志,可以在启动 Virtualize 时指定 JVM 系统属性
parasoft.proxy.mq.put.open.options
andparasoft.proxy.mq.put.options
。 例如,假设消息包含 MQMD 头putApplicationNam
e 的自定义值。在队列打开选项上设置MQOO_SET_ALL_CONTEXT
标志,以及在 put 选项上设置MQPMO_SET_ALL_CONTEXT
标志,将允许消息代理转发自定义的 putApplicationName 头值。
有关选项标志值,请参阅 IBMmq_queue_get_open_options
和mq_message_put_options
参数。例如:这里使用的值是由各个标志表示的所有值的和。例如,open 选项值virtualize.exe -J-Dparasoft.proxy.mq.put.open.options=2052 -J-Dparasoft.proxy.mq.put.options=2064
2052
表示三个标志MQC.MQOO_SET_ALL_CONTEXT
、MQC.MQOO_INPUT_SHARED
和MQC.MQOO_INPUT_EXCLUSIVE 被打开
。
- Put 队列始终是 AUT/client 放置/发送请求消息的地方。Get 队列是 client/AUT 获得响应消息的地方。
- 如有需要,请修改使用 replyToQueueName响应设置。该选项指定是否使用消息的
replyToQueueName
头来确定代理发送响应的位置。它影响MQMT_REQUEST
类型的 MQ 消息的响应。- 如果启用了该选项,来自传入请求的值将用于确定将响应发送到何处。如果未启用该选项,响应将发送值 UI 中指定的队列。更具体地说:
如果启用了该选项,并且指定了
MQMD.replyToQueueManagerName
和MQMD.replyToQueueName
的值,那么这些值将确定要将响应发送到的队列管理器和队列名称。- 如果启用了该选项,并且请求中缺少了
MQMD.replyToQueueManagerName
或MQMD.replyToQueueName
,那么将使用 UI 中指定的值来替代缺少的值。 - 如果禁用了该选项,那么将忽略 MQ 请求消息中的
replyToQueueName
和replyToQueueManagerName
字段。UI 设置将确定消息发送到何处。
- 如果启用了该选项,来自传入请求的值将用于确定将响应发送到何处。如果未启用该选项,响应将发送值 UI 中指定的队列。更具体地说:
如果需要,请修改线程数设置。
- 如果不使用全局队列管理器队列管理器,请在本地设置区域中指定连接细节。可以选择以下模式:
- 默认模式:允许您手动输入详细的连接信息(例如,主机、端口、通道等)。
- CCDT 模式:允许指定提供连接详细信息的客户端通道定义表(CCDT)文件。
如果使用默认模式,请填写以下字段:
选项 | 说明 |
---|---|
主机 | 指定运行 IBM MQ 的主机名。 |
端口 | 指定运行 IBM MQ 的端口。 |
通道 | 指定服务端定义的通道的名称。 |
队列管理器 | 指定队列管理器的名称。 |
用户名/密码 | 如果需要,请输入。 |
如果使用 CCDT 模式,请填写以下字段:
本地服务器
远程服务器
选项 | 说明 |
---|---|
CCDT 文件 | 指定 CCDT 文件的位置(扩展名为 .tab)。 如果代理部署在远程服务器上,请使用文本字段指定 CCDT 文件的相对路径,因为它将出现在服务器树中的“文件”节点下。 如果代理部署在本地服务器上,则可以使用文件系统或工作空间按钮浏览到文件的位置。如果您正在配置当前部署在本地服务器上但稍后将部署在远程服务器上的代理,则需要在将代理部署到远程服务器之前将 CCDT 文件部署到远程服务器。请参阅在远程服务器和本地计算机之间传输文件。 |
队列管理器 | 指定队列管理器的名称。 |
用户名/密码 | 如果需要,请输入。 |
配置 MQ CCSID
在大多数情况下,默认的 CCSID Virtualize 用于连接到 MQ 队列管理器是可以接受的。但是,如果将 MQ 队列管理器配置为使用不同的 CCSID,则会通知您队列管理器不支持 CCSID。
您可以在 JVM 参数中设置以下系统属性,以更改用于连接 MQ 队列管理器的默认 CCSID:
parasoft.mq.environment.ccsid=<CCSID>
您设置的 CCSID 取决于队列管理器的 CCSID 以及 JVM 支持哪些字符集。
还请参阅其他首选项设置 。
使用全局队列管理器
跨特定 Virtualize 服务器应用的全局队列管理器设置可以在服务器级别定义,然后在这里引用。 详情请参阅连接选项卡。若要使用全局队列管理器,请从相应队列框中选择。使用命名规范列出 MQ 服务器主机名:队列管理器名
若要查看预定义的全局队列管理器的详情,请点击查看设置。
队列配置技巧
有关如何在不同场景中配置队列的提示,请参阅配置录制的队列。