[MQ 9.3.3 2023 年 6 月]

设置要与 messaging REST API 配合使用的远程队列管理器

您可以使用 messaging REST API 来连接到远程队列管理器以进行消息传递。 必须先设置远程队列管理器配置,然后才能连接到远程队列管理器。 然后,可以使用配置信息中定义的唯一名称来连接到远程队列管理器。

开始之前

  • 确保已配置 mqweb 服务器以供 administrative REST APIadministrative REST API for MFTmessaging REST APIIBM® MQ Console使用。有关使用基本注册表配置 mqweb 服务器的更多信息,请参阅 mqweb 服务器的基本配置
  • 如果已配置 mqweb 服务器,请确保在 mqweb 服务器的基本配置的步骤 5 中添加了相应的用户以启用消息传递。 messaging REST API 的用户必须是 MQWebUser 角色的成员。 MQWebAdminMQWebAdminRO 角色不适用于 messaging REST API
    • 如果在 mqweb 服务器配置中将 mqRestMessagingAdoptWebUserContext 设置为 true ,那么必须授权 MQWebUser 角色中的用户通过 OAM 或 RACF®访问用于消息传递的队列和主题。
    • 如果 mqRestMessagingAdoptWebUserContext 在 mqweb 服务器配置中设置为 false ,那么必须授权用于启动 mqweb 服务器的用户标识通过 OAM 或 RACF访问用于消息传递的队列和主题。
  • 确保 messaging REST API 配置为连接到远程队列管理器。 有关更多信息,请参阅 messaging REST API配置连接方式

关于本任务

您可以使用 messaging REST API连接到远程队列管理器。 远程队列管理器可以是另一个系统上的队列管理器,另一个安装中的队列管理器或与 mqweb 服务器相同的安装中的队列管理器。

要连接到远程队列管理器,必须完成以下配置步骤:
  • 配置服务器连接通道和侦听器。
  • 授予相应用户访问队列管理器的权限。
  • 创建包含队列管理器的连接信息的 CCDT 文件。
  • 使用 setmqweb remote 命令将连接信息添加到 messaging REST API
然后,您URL 中提供唯一名称来代替队列管理器名称,从而使用远程队列管理器。

您还可以将远程队列管理器配置为队列管理器组的一部分。 有关更多信息,请参阅 设置队列管理器组以用于消息传递 REST API

过程

  1. 在远程队列管理器上,创建服务器连接通道以允许与队列管理器的远程连接。 您可以在命令行上使用 DEFINE CHANNEL MQSC 命令来创建服务器连接通道。
    例如,要为队列管理器 QM1创建服务器连接通道 QM1.SVRCONN ,请输入以下命令:
    DEFINE CHANNEL(QM1.SVRCONN) CHLTYPE(SVRCONN) TRPTYPE(TCP)
    有关 DEFINE CHANNEL 和可用选项的更多信息,请参阅 DEFINE CHANNEL
  2. 确保相应用户有权访问队列管理器。 此用户还必须有权访问用于消息传递的任何队列或主题。 用户需要队列管理器上的 connectinquirealternate userset context 权限。 在 UNIX, Linux®, and Windows 上,在命令行上使用 setmqaut 控制命令。 在 z/OS®上,定义 RACF 概要文件以授予授权用户对队列管理器的访问权。
    例如,在 UNIX, Linux, and Windows上,要授权用户 exampleUser访问队列管理器 QM1,请输入以下命令:
    setmqaut -m QM1 -t qmgr -p exampleUser +connect +inq +altusr +setall
    有关需要授权的用户的更多信息,请参阅 确定消息传递 REST API 所使用的安全主体
  3. [AIX、Linux 和 Windows]如果远程队列管理器上不存在侦听器,请在命令行上使用 DEFINE LISTENER MQSC 命令创建侦听器以接受入局网络连接。
    例如,要在端口 1414 上为远程队列管理器 QM1创建侦听器 REMOTE.LISTENER ,请输入以下命令:
    runmqsc QM1
    DEFINE LISTENER(REMOTE.LISTENER) TRPTYPE(TCP) PORT(1414)
    end
  4. 通过在命令行上使用 START LISTENER MQSC 命令来确保侦听器正在运行:
    [AIX、Linux 和 Windows]例如,在 AIX®, Linux, and Windows 上,要启动队列管理器 QM1的侦听器 REMOTE.LISTENER ,请输入以下命令:
    runmqsc QM1
    START LISTENER(REMOTE.LISTENER)
    end
    [z/OS]例如,在 z/OS上,要启动侦听器,请输入以下命令:
    runmqsc QM1
    START LISTENER TRPTYPE(TCP) PORT(1414)
    end
    必须先启动通道启动程序地址空间,然后才能在 z/OS上启动侦听器。
  5. 在运行 messaging REST API 所在的 mqweb 服务器的系统上,创建或更新包含队列管理器连接信息的 JSON CCDT 文件。

    CCDT 文件必须包含 nameclientConnectiontype 信息。 您可以选择包含其他信息,例如 transmissionSecurity 信息。 有关所有 CCDT 通道属性定义的更多信息,请参阅 CCDT 通道属性定义的完整列表

    以下示例显示了用于远程队列管理器连接的基本 JSON CCDT 文件。 它将通道的名称设置为与步骤 1中创建的示例服务器连接通道的名称相同。 连接端口设置为与侦听器所使用的端口相同的值。 连接主机设置为运行远程队列管理器 QM1的系统的主机名。
    {
      "channel": [{
          "name": "QM1.SVRCONN",
          "clientConnection": {
            "connection": [{
                "host": "example.com",
                "port": 1414
              }],
            "queueManager": "QM1"
          },
          "type": "clientConnection"
        }]
    }
  6. 从正在运行托管 messaging REST API的 mqweb 服务器的安装中,使用 setmqweb remote 命令将远程队列管理器信息添加到 mqweb 服务器配置。
    必须至少指定以下参数:
    • -qmgrName,在其中指定队列管理器的名称。
    • -ccdtURL,其中指定队列管理器的 URL。
    • -uniqueName,其中指定队列管理器的唯一名称。 唯一名称用于区分可能具有相同名称的远程队列管理器,因此不能存在用于标识另一个队列管理器的远程队列管理器。

    您可以指定其他一些选项,例如用于远程队列管理器连接的用户名和密码,或者信任库和密钥库的详细信息。 有关可以使用 setmqweb remote 命令指定的参数的完整列表,请参阅 setmqweb remote

    例如,要使用示例 CCDT 文件添加远程队列管理器 QM1,请输入以下命令:
    setmqweb remote add -uniqueName "RemoteQM1" -qmgrName "QM1" -ccdtURL "c:\myccdts\ccdt.json"

结果

远程队列管理器可与 messaging REST API 一起使用,只需在URL使用唯一名称代替队列管理器名称即可。

示例

以下示例为队列管理器 QM1设置远程队列管理器连接。 有权根据授予用户 exampleUser的权限来管理队列管理器的 IBM MQ Console 。 当 setmqweb remote 用于配置队列管理器连接时,会将此用户的凭证提供给 IBM MQ Console
  1. 在远程队列管理器 QM1 所在的系统上,将创建服务器连接通道和侦听器。 该侦听器已启动,并且已授权用户 exampleUser 连接到队列管理器并访问用于消息传递的队列:
    runmqsc QM1
    #Define the server connection channel that will accept connections from the Console
    DEFINE CHANNEL(QM1.SVRCONN) CHLTYPE(SVRCONN) TRPTYPE(TCP)
    # Define the listener to use for the connection from the Console
    DEFINE LISTENER(REMOTE.LISTENER) TRPTYPE(TCP) PORT(1414)
    # Start the listener
    START LISTENER(REMOTE.LISTENER)
    end
    
    #Set mq authorization for exampleUser to access the queue manager and a queue for messaging
    setmqaut -m QM1 -t qmgr -p exampleUser +connect +inq +setall +dsp
    setmqaut -m QM1 -t queue -p exampleUser -n EXAMPLEQ +put +get +browse +inq
  2. 在运行 mqweb 服务器的系统上,将使用以下连接信息创建 QM1_ccdt.json 文件:
    {
      "channel": [{
          "name": "QM1.SVRCONN",
          "clientConnection": {
            "connection": [{
                "host": "example.com",
                "port": 1414
              }],
            "queueManager": "QM1"
          },
          "type": "clientConnection"
        }]
    }
    
  3. 在运行 mqweb 服务器的系统上,队列管理器 QM1 的连接信息将添加到 mqweb 服务器。 exampleUser 的凭证包含在连接信息中:
    setmqweb remote add -uniqueName "MACHINEAQM1" -qmgrName "QM1" -ccdtURL "c:\myccdts\QM1_ccdt.json" -username "exampleUser" -password "password"
  4. messaging REST API 可以使用队列管理器连接的唯一名称来代替URL队列管理器名称,从而连接到远程QM1 :
    curl -k https://localhost:9443/ibmmq/rest/v2/messaging/qmgr/MACHINEAQM1/queue/EXAMPLEQ/message -X POST -u myuser:mypassword -H "ibm-mq-rest-csrf-token: value" -H "Content-Type: text/plain;charset=utf-8" --data "Hello World!"