将 MQ Light API 的 IBM® MQ 支持安装到 IBM MQ 安装中时,可以运行 IBM MQ MQSC 命令 (runmqsc) 来定义,变更,删除,启动和停止通道。 您还可以查看通道的状态。
开始之前
此任务假定您已安装 AMQP 通道。 通过在安装
IBM MQ时选择 AMQP 服务组件来执行此操作。 有关更多信息,请遵循您平台的链接,然后查找 "AMQP 服务" 的表行:
要与队列管理器建立测试连接,您必须具有 MQ Light 客户机。 MQ Light 客户机可用于 Node.js, Ruby , Java和 Python。 有关可用客户机的更多信息,请参阅 IBM MQ Light 社区 Web 站点。
此任务基于 MQ Light Node.js 客户机。 但是,与 IBM MQ 队列管理器相关的步骤对于任何客户机都是相同的。
关于本任务
以下过程假设您已将现有的非生产队列管理器升级到命令级别 801。 要为队列管理器启用 801 命令级别,那么可以运行以下命令:
strmqm -e CMDLEVEL=801 <QMNAME>
运行完此命令后,您必须重新启动队列管理器。
如果需要新的队列管理器,那么应包含一个样本脚本(位于 <mqinstall>/amqp/samples 目录中)。 该脚本在命令级别 801 创建新的队列管理器,启动 AMQP 服务,创建名为 SAMPLE.AMQP.CHANNEL的新通道,然后启动该通道。 如果运行样本脚本 (
SampleMQM.sh on
Linux或
SampleMQM.bat on Windows) ,那么可以在步骤 6 中启动以下过程。
注: AMQP 通道不支持用户定义的 AMQP 服务。 AMQP 通道只支持系统缺省 SYSTEM.AMQP.SERVICE 服务。
如果已将现有队列管理器升级到命令级别 801,那么会创建新的缺省通道对象。 该缺省通道名为 SYSTEM.DEF.AMQP。 您可以使用缺省通道来测试与队列管理器的 MQ Light 连接,也可以创建新通道。
以下过程使用缺省通道。
过程
- 从 <mqinstall>/bin/ 目录启动 runmqsc :
- 检查 AMQP 功能是否已安装并正常工作。
使用
START SERVICE 命令来启动 IBM MQ 服务,该服务用于控制 JVM:
START SERVICE(SYSTEM.AMQP.SERVICE)
- 设置 MCAUSER 用户标识。
当 AMQP 客户机连接到通道时,该通道将指定 MCAUSER 用户标识(与队列管理器的连接上将使用此用户标识)。 MCAUSER 的缺省值为空。 在任何 AMQP 客户机可以连接到队列管理器之前,必须指定 MCAUSER 值,该值必须是有权发布和预订 IBM MQ 主题的有效 IBM MQ 用户。
- 使用 ALTER CHANNEL 命令来设置 MCAUSER 用户标识:
ALTER CHANNEL(SYSTEM.DEF.AMQP) CHLTYPE(AMQP) MCAUSER(User ID)
- 使用以下两个 setmqaut 命令来授权 MCAUSER 用户标识发布和预订主题:
setmqaut -m <QMNAME> -t topic -n SYSTEM.BASE.TOPIC -p <MCAUSER>
-all +pub +sub
和
setmqaut -m <QMNAME> -t qmgr -p <MCAUSER> -all +connect
如果在添加或变更
MCAUSER 用户标识期间运行通道,那么必须停止并重新启动该通道。
注: 如果未设置 MCAUSER 用户标识,或者 MCAUSER 用户标识无权发布或预订 IBM MQ 主题,那么您将在 AMQP 客户机中接收到错误消息。
- 使用 START CHANNEL 命令启动缺省 SYSTEM.DEF.AMQP 通道:
START CHANNEL(SYSTEM.DEF.AMQP)
- 可选: 如果要检查通道状态,请使用 DISPLAY
CHSTATUS 命令:
DISPLAY CHSTATUS(SYSTEM.DEF.AMQP) CHLTYPE(AMQP)
当通道正常运行时,命令输出中会显示
STATUS(RUNNING)。
- 可选: 更改缺省端口。
AMQP 1.0 连接的缺省端口是 5672。 如果您已在使用端口 5672 (如果先前安装了
MQ Light) ,那么需要更改 AMQP 通道所使用的端口。 使用
ALTER CHANNEL 命令更改端口:
ALTER CHANNEL(SYSTEM.DEF.AMQP) CHLTYPE(AMQP) PORT(NEW PORT NUMBER)
- 如果您不想使用通道认证 (CHLAUTH) 规则来阻止或过滤与 AMQP 通道的连接,请按如下所示禁用队列管理器上的通道认证:
alter qmgr chlauth(disabled)
建议不要禁用生产队列管理器上的连接认证。 您应在开发环境中禁用连接认证。
或者,将队列管理器通道认证规则配置为允许与 AMQP 通道建立特定连接。
- 可选: 如果要在通道上启用 SSL/TLS 加密,请使用为队列管理器配置的密钥存储库,必须将通道的 SSLCIPH 属性设置为相应的密码规范。 缺省情况下,密码规范为空,这意味着通道上不使用 SSL/TLS 加密。 可使用 ALTER CHANNEL 命令设置密码规范。 例如:
ALTER CHANNEL(SYSTEM.DEF.AMQP) CHLTYPE(AMQP) SSLCIPH(CIPHER SPECIFICATION)
此外,SSL/TLS 加密还有许多其他相关的通道配置选项,您可以按如下所示进行设置:
- 缺省情况下,队列管理器密钥存储库中的证书(其标签对应于
队列管理器 CERTLABL 属性)是由通道的 SSL/TLS 加密所使用的名称。 您可以通过设置 CERTLABL 来选择其他证书。 使用 ALTER CHANNEL 命令为所需证书指定标签:
ALTER CHANNEL(SYSTEM.DEF.AMQP) CHLTYPE(AMQP) CERTLABL(CERTIFICATE LABEL)
- 您可以将通道设置为需要来自 SSL/TLS 客户机连接的证书。 您可以通过设置 SSLCAUTH 来选择是否需要来自 SSL/TLS 客户机连接的证书。 使用 ALTER CHANNEL 命令设置是否需要来自 SSL/TLS 客户机连接的证书。 例如:
ALTER CHANNEL(SYSTEM.DEF.AMQP) CHLTYPE(AMQP) SSLCAUTH(REQUIRED or OPTIONAL)
如果您将 SSLCAUTH 属性设置为 REQUIRED,那么可以检查来自客户机的证书的专有名称 (DN)。 要检查来自客户机的证书的专有名称,请设置 SSLPEER 属性。 使用 ALTER CHANNEL 命令检查来自客户机的证书的专有名称。 例如:ALTER CHANNEL(SYSTEM.DEF.AMQP) CHLTYPE(AMQP) SSLPEER (DN SPECIFICATION)
或者,也可以使用通道认证记录来允许或阻止连接,因为相比于使用 SSLPEER 属性,此方法的详细程度更高。 有关设置 SSLPEER 和使用通道认证记录作为替代方法的更多信息,请参阅 SSL 同级。
- 通过运行以下命令安装 MQ Light Node.js 客户机:
- 浏览至 node_modules/mqlight/samples 目录,然后运行样本接收方应用程序:
如果成功连接到缺省通道,那么将显示以下消息:
Connected to amqp://localhost:5672 using client-id recv_e79c55d
Subscribed to pattern: public
该应用程序现在已连接到队列管理器,并等待接收消息。 其预订了主题
public。
注: 除非使用 -i 参数指定 client-id ,否则将自动生成该参数。
- 在新的命令窗口中,浏览到 node_modules/mqlight/samples 目录,然后通过运行以下命令来运行样本发送方应用程序:
在接收方应用程序的命令窗口中,Hello World消息。
- 可选: 使用 AMQSSUB IBM MQ 样本接收 MQ Light 样本消息。
在
Linux 和
Windows上,可以在以下位置找到样本:
- Linux上的
mqinstall/samp/bin 目录。
- Windows上的
mqinstall/Tools\c\Samples\Bin 目录。
- 通过运行以下命令来运行该样本:
amqssub public <QM-name>.
- 通过重新运行以下命令将消息发送到 IBM MQ 应用程序:
- 可选: 使用 DEFINE CHANNEL 命令创建更多 AMQP 通道:
DEFINE CHANNEL(MY.AMQP.CHANNEL) CHLTYPE(AMQP) PORT(2345)
定义通道后,必须使用
START CHANNEL 命令手动启动该通道:
START CHANNEL(MY.AMQP.CHANNEL)
要检查通道是否在正常运行,您可以指定新通道的端口来运行样本接收方应用程序:
node recv.js -s amqp://localhost:2345
后续操作
您可以使用以下命令来显示
IBM MQ 连接,停止通道以及删除通道:
DISPLAY CONN(*) TYPE(CONN) WHERE
(CHANNEL EQ SYSTEM.DEF.AMQP)
- 显示 AMQP 通道在队列管理器上建立的 IBM MQ 连接。
DISPLAY CHSTATUS(*) CHLTYPE(AMQP)
CLIENTID(*) ALL
- 显示已连接到指定通道的 AMQP 客户机的列表。
STOP CHANNEL (MY.AMQP.CHANNEL)
- 阻止 AMQP 通道,并且关闭它正在侦听的端口。
DELETE CHANNEL (MY.AMQP.CHANNEL)
- 删除您创建的任何通道。
注: 请勿删除缺省通道 SYSTEM.DEF.AMQP。
您可以使用
runmqsc 或 PCF 来确定 AMQP 功能是否已安装到
IBM MQ 安装中,以及是否存在与其关联的队列管理器:
- 使用 runmqsc 显示队列管理器的属性,并检查是否存在
AMQPCAP(YES)。
- 使用 PCF 和 MQCMD_INQUIRE_Q_MGR 命令,并确认
MQIA_AMQP_CAPABILITY 的值。