IBM Cloud Docs
使用 REST API 网关管理已连接的队列管理器

使用 REST API 网关管理已连接的队列管理器

什么是使用 REST API 进行远程管理?

IBM® MQ 允许您使用管理 REST API 来管理 IBM® MQ 对象,例如队列管理器和队列。 将以 JSON 格式与管理 REST API 之间收发信息。 这些 RESTful API 可以帮助您将 IBM MQ 管理嵌入到常用 DevOps 和自动化工具中。

本教程将涵盖以下内容:

  1. 我们将创建两个 MQ on Cloud 队列管理器,第一个队列管理器将充当网关队列管理器,第二个队列管理器将充当远程队列管理器。
  2. 配置 MQ on Cloud 网关队列管理器以管理远程队列管理器。 即,我们将配置网关队列管理器与远程队列管理器之间的传输队列、侦听器以及发送方和接收方通道。
  3. 我们将通过在资源 URL 中指定队列管理器名称,向远程队列管理器发送 REST 请求,并且网关队列管理器在随请求一起发送的头中指定。

请求通过网关队列管理器发送到远程队列管理器。 成功提交请求时,会返回响应,其中的头指示用作网关队列管理器的队列管理器。


先决条件

为了使用管理 REST API 网关来管理远程队列管理器,我们将准备队列管理器进行远程管理。 然后,通过在随请求发送的头中设置 ibm-mq-rest-gateway-qmgr 属性来指定网关队列管理器。 请求通过网关队列管理器发送到远程队列管理器。 返回的响应的头指示用作网关队列管理器的队列管理器。

为了继续执行本教程,请务必确保您已完成以下先决条件:

  1. 创建两个 IBM MQ on Cloud 队列管理器

    如果您还没有 IBM MQ on Cloud 队列管理器,那么可以通过遵循此处的引导式教程来创建这些队列管理器: IBM MQ on Cloud 入门 遵循引导式教程或在同一页面上提供的手动步骤,或者如果在云队列管理器上使用现有 MQ ,那么应该具有:

    • MQ on Cloud 队列管理器
    • 在 connection_info.txt 文件中下载的连接详细信息
      • 如果没有此文件,请查阅本教程底部的附录 1
    • 在 platformApiKey.json 文件中下载的管理员用户名和 API 密钥
      • 如果没有此文件,请查阅本教程底部的附录 2
  2. 建议掌握有关使用 REST API 管理 MQ 的知识。


配置详细信息:

您应该已阅读过先决条件中提供的信息。 现在,您应该有两个 MQ on Cloud 队列管理器。 我们将第一个 MQ on Cloud 队列管理器命名为 QM1,另一个 MQ on Cloud 队列管理器命名为 QM2

其中:

  • QM1:充当网关队列管理器

  • QM2:充当远程队列管理器

    Image showing 'Two Queue Managers' created in IBM cloud.

  1. 配置网关队列管理器与要管理的远程队列管理器之间的通信。 我们将创建发送方/接收方通道以及传输队列,并使用每个队列管理器的队列管理器连接属性中提供的侦听器端口:

    1.1. 在队列管理器 QM1 上,将创建以下 IBM MQ 对象:

    • 发送方通道 QM1.to.QM2
    • 接收方通道 QM2.to.QM1
    • 传输队列 QM2
    • 在 MQ on Cloud 队列管理器 (QM1) 连接信息文件中提供的侦听器端口。

    1.2. 在队列管理器 QM2 上,将创建以下 IBM MQ 对象:

    • 发送方通道 QM2.to.QM1
    • 接收方通道 QM1.to.QM2
    • 传输队列 QM1
    • 在 MQ on Cloud 队列管理器 (QM2) 连接信息文件中提供的侦听器端口。

    :在队列管理器(即 QM1 和 QM2)中,必须提供用于访问队列和通道的相应权限。

  2. 执行以上步骤后,可以在 MQ on Cloud 队列管理器 Web 控制台中观察步骤 1 中创建的通道和队列。 对于每个队列管理器:

    • 队列 - 选择管理,然后确保选中队列
    • 通道 - 选择管理,然后选择通信,最后单击队列管理器通道应用程序通道
  3. 现在,可以通过在队列管理器管理 REST 端点上设置网关队列管理器头属性,经由网关队列管理器(即 QM1)对远程队列管理器(即 QM2)发出管理 REST API 调用。 我们必须在 HTTP 头中指定网关队列管理器,例如 ibm-mq-rest-gateway-qmgr:<GATEWAY_QM_NAME>

    例如,ibm-mq-rest-gateway-qmgr:QM1,其中 QM1 是网关队列管理器名称。

可以使用其他任何工具来发出 Get 请求,并进行以下 REST API 调用。

GET https://<Admin_REST_endpoint>:<Listener_Port>/ibmmq/rest/v1/admin/qmgr/<Remote_Queue_Manager_Name>/queue

  • 例如,GET https://web-qm1-b779.qm2.us-preprod.mq.test.appdomain.cloud/ibmmq/rest/v1/admin/qmgr/QM2/queue

为了简单起见,我将使用 curl 命令,但您可以使用其他任何工具或应用程序来发出 HTTP 请求。

语法

curl -u <ADMIN_MQ_USER>:<ADMIN_API_KEY> -H "Accept: application/json" -H "Content-Type: application/json" -H "ibm-mq-rest-gateway-qmgr: <GATEWAY_QUEUE_MANAGER>" <ADMIN_REST_ENDPOINT>/<REMOTE_QUEUE_MANAGER_NAME>/queue -k

例如,

curl -u mamgainp:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -H "Accept: application/json" -H "Content-Type: application/json" -H "ibm-mq-rest-gateway-qmgr: QM1" https://web-qm1-b779.qm2.us-preprod.mq.test.appdomain.cloud/ibmmq/rest/v1/admin/qmgr/QM2/queue -k

以上命令返回在远程队列管理器中运行的队列的列表。

其中:

  • <ADMIN_MQ_USER> -这是网关队列管理器 (例如, QM1 ) 的 platformApiKey.json 文件中的 "mqUsername"。

  • <QUEUE_MANAGER_NAME> -这是网关队列管理器 (例如, QM1 ) 的 connection_info.json 文件中的 "queueManagerName"。

  • <ADMIN_API_KEY> = 网关队列管理器的 platformApiKey.json 文件中的 "apiKey" (在本例中为 QM1 )。

  • <ADMIN_REST_ENDPOINT> = 这是网关队列管理器 (例如, QM1 ) 的 connection_info.json 文件中的 "adminREST"。

    - 在本例中,adminREST 属性点将指向网关队列管理器名称,请将网关队列管理器替换为远程队列管理器名称。 例如 - https://web-qm1-b779.qm2.us-preprod.mq.test.appdomain.cloud/ibmmq/rest/v1/admin/qmgr/QM1,其中将 QM1 替换为 QM2,如 https://web-qm1-b779.qm2.us-preprod.mq.test.appdomain.cloud/ibmmq/rest/v1/admin/qmgr/QM2

  • <Remote_Queue_Manager_Name> -这是远程队列管理器 (在本例中为 QM2 ) 的 connection_info.json 文件中的 "queueManagerName"。


结果

  1. ibm-mq-rest-gateway-qmgr 头会随 REST 响应一起返回。 此头指定哪个队列管理器用作网关队列管理器。

下面是响应头的片段,其中包含 ibm-mq-rest-gateway-qmgr 作为其中一个属性。

Date: Mon, 04 Mar 2019 05:29:49 GMT
Content-Type: application/json
Content-Length: 4653
Connection: keep-alive
X-Powered-By: Servlet/3.1
Cache-Control: no-cache, no-store, must-revalidate
Content-Language: en-US
ibm-mq-rest-gateway-qmgr: QM1
Strict-Transport-Security: max-age=31536000; includeSubDomains

:以上使用的任何队列管理器(即,网关队列管理器或远程队列管理器)都可以替换为其他任何 IBM MQ 队列管理器来使用。


附录

附录 1:connection_info.txt

要检索包含队列管理器连接详细信息的 connection_info.txt 文件,请执行以下操作:

  1. 通过单击表中显示的相关服务,登录到 IBM 云服务实例 显示服务实例的图像
  2. 这将打开队列管理器视图。 选择要从中检索连接信息的队列管理器 显示队列管理器列表的图像
  3. 单击 连接信息 队列管理器连接信息的图像
  4. 以“JSON 文本格式”下载此文件

附录 2:platformApiKey.json

要创建或重置管理员 API 密钥,请执行以下操作:

  1. 通过单击表中显示的相关服务,登录到 IBM 云服务实例 显示服务实例的图像
  2. 这将打开队列管理器视图。 选择要从中检索连接信息的队列管理器 显示队列管理器列表的图像
  3. 接下来,选择 管理 选项卡 此图显示突出显示了 "队列管理器管理" 选项卡
  4. 现在,单击重置 IBM Cloud API 密钥/创建 IBM Cloud API 密钥
  • 注:此 MQ 用户名的先前管理员 API 密钥将不再有效

此图显示了突出显示的管理 API 密钥重置按钮

  • 注:如果该按钮显示创建 IBM Cloud API 密钥,说明您之前未以这种方式创建过 API 密钥。 请单击创建 IBM Cloud API 密钥按钮。
  1. 单击 下载 以下载包含管理员用户名和 API 密钥的 platformApiKey.json 此图显示突出显示了管理新 API 密钥的 "下载" 按钮
  • <ADMIN_MQ_USER> -这是队列管理器的 platformApiKey.json 文件中的 "mqUsername"。
  • <QUEUE_MANAGER_NAME> -这是队列管理器的 connection_info.json 文件中的 "queueManagerName"。
  • <ADMIN_API_KEY> = 队列管理器的 platformApiKey.json 文件中的 "apiKey"。