使用 REST API 网关管理已连接的队列管理器
什么是使用 REST API 进行远程管理?
IBM® MQ 允许您使用管理 REST API 来管理 IBM® MQ 对象,例如队列管理器和队列。 将以 JSON 格式与管理 REST API 之间收发信息。 这些 RESTful API 可以帮助您将 IBM MQ 管理嵌入到常用 DevOps 和自动化工具中。
本教程将涵盖以下内容:
- 我们将创建两个 MQ on Cloud 队列管理器,第一个队列管理器将充当网关队列管理器,第二个队列管理器将充当远程队列管理器。
- 配置 MQ on Cloud 网关队列管理器以管理远程队列管理器。 即,我们将配置网关队列管理器与远程队列管理器之间的传输队列、侦听器以及发送方和接收方通道。
- 我们将通过在资源 URL 中指定队列管理器名称,向远程队列管理器发送 REST 请求,并且网关队列管理器在随请求一起发送的头中指定。
请求通过网关队列管理器发送到远程队列管理器。 成功提交请求时,会返回响应,其中的头指示用作网关队列管理器的队列管理器。
先决条件
为了使用管理 REST API 网关来管理远程队列管理器,我们将准备队列管理器进行远程管理。 然后,通过在随请求发送的头中设置 ibm-mq-rest-gateway-qmgr
属性来指定网关队列管理器。 请求通过网关队列管理器发送到远程队列管理器。 返回的响应的头指示用作网关队列管理器的队列管理器。
为了继续执行本教程,请务必确保您已完成以下先决条件:
-
创建两个 IBM MQ on Cloud 队列管理器
如果您还没有 IBM MQ on Cloud 队列管理器,那么可以通过遵循此处的引导式教程来创建这些队列管理器: IBM MQ on Cloud 入门 遵循引导式教程或在同一页面上提供的手动步骤,或者如果在云队列管理器上使用现有 MQ ,那么应该具有:
- MQ on Cloud 队列管理器
- 在 connection_info.txt 文件中下载的连接详细信息
- 如果没有此文件,请查阅本教程底部的附录 1
- 在 platformApiKey.json 文件中下载的管理员用户名和 API 密钥
- 如果没有此文件,请查阅本教程底部的附录 2
-
建议掌握有关使用 REST API 管理 MQ 的知识。
配置详细信息:
您应该已阅读过先决条件中提供的信息。 现在,您应该有两个 MQ on Cloud 队列管理器。 我们将第一个 MQ on Cloud 队列管理器命名为 QM1,另一个 MQ on Cloud 队列管理器命名为 QM2。
其中:
-
QM1:充当网关队列管理器
-
QM2:充当远程队列管理器
-
配置网关队列管理器与要管理的远程队列管理器之间的通信。 我们将创建发送方/接收方通道以及传输队列,并使用每个队列管理器的队列管理器连接属性中提供的侦听器端口:
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)中,必须提供用于访问队列和通道的相应权限。
-
执行以上步骤后,可以在 MQ on Cloud 队列管理器 Web 控制台中观察步骤 1 中创建的通道和队列。 对于每个队列管理器:
- 队列 - 选择管理,然后确保选中队列
- 通道 - 选择管理,然后选择通信,最后单击队列管理器通道和应用程序通道
-
现在,可以通过在队列管理器管理 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"。
结果
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 文件,请执行以下操作:
- 通过单击表中显示的相关服务,登录到 IBM 云服务实例
- 这将打开队列管理器视图。 选择要从中检索连接信息的队列管理器
- 单击 连接信息
- 以“JSON 文本格式”下载此文件
附录 2:platformApiKey.json
要创建或重置管理员 API 密钥,请执行以下操作:
- 通过单击表中显示的相关服务,登录到 IBM 云服务实例
- 这将打开队列管理器视图。 选择要从中检索连接信息的队列管理器
- 接下来,选择 管理 选项卡
- 现在,单击重置 IBM Cloud API 密钥/创建 IBM Cloud API 密钥
- 注:此 MQ 用户名的先前管理员 API 密钥将不再有效
- 注:如果该按钮显示创建 IBM Cloud API 密钥,说明您之前未以这种方式创建过 API 密钥。 请单击创建 IBM Cloud API 密钥按钮。
- 单击 下载 以下载包含管理员用户名和 API 密钥的 platformApiKey.json
<ADMIN_MQ_USER>
-这是队列管理器的 platformApiKey.json 文件中的 "mqUsername"。<QUEUE_MANAGER_NAME>
-这是队列管理器的 connection_info.json 文件中的 "queueManagerName"。<ADMIN_API_KEY>
= 队列管理器的 platformApiKey.json 文件中的 "apiKey"。