[Windows][UNIX][Linux]

创建和使用 AMQP 通道

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 LinuxSampleMQM.bat on Windows) ,那么可以在步骤 6 中启动以下过程。
注: AMQP 通道不支持用户定义的 AMQP 服务。 AMQP 通道只支持系统缺省 SYSTEM.AMQP.SERVICE 服务。

如果已将现有队列管理器升级到命令级别 801,那么会创建新的缺省通道对象。 该缺省通道名为 SYSTEM.DEF.AMQP。 您可以使用缺省通道来测试与队列管理器的 MQ Light 连接,也可以创建新通道。

以下过程使用缺省通道。

过程

  1. <mqinstall>/bin/ 目录启动 runmqsc :
    runmqsc <QMNAME>
    
  2. 检查 AMQP 功能是否已安装并正常工作。
    使用 START SERVICE 命令来启动 IBM MQ 服务,该服务用于控制 JVM:
    START SERVICE(SYSTEM.AMQP.SERVICE)
    
  3. 设置 MCAUSER 用户标识。
    当 AMQP 客户机连接到通道时,该通道将指定 MCAUSER 用户标识(与队列管理器的连接上将使用此用户标识)。 MCAUSER 的缺省值为空。 在任何 AMQP 客户机可以连接到队列管理器之前,必须指定 MCAUSER 值,该值必须是有权发布和预订 IBM MQ 主题的有效 IBM MQ 用户。
    1. 使用 ALTER CHANNEL 命令来设置 MCAUSER 用户标识:
      ALTER CHANNEL(SYSTEM.DEF.AMQP) CHLTYPE(AMQP) MCAUSER(User ID)
      
    2. 使用以下两个 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 客户机中接收到错误消息。
  4. 使用 START CHANNEL 命令启动缺省 SYSTEM.DEF.AMQP 通道:
    START CHANNEL(SYSTEM.DEF.AMQP)
    
  5. 可选: 如果要检查通道状态,请使用 DISPLAY CHSTATUS 命令:
    DISPLAY CHSTATUS(SYSTEM.DEF.AMQP) CHLTYPE(AMQP)
    
    当通道正常运行时,命令输出中会显示 STATUS(RUNNING)
  6. 可选: 更改缺省端口。
    AMQP 1.0 连接的缺省端口是 5672。 如果您已在使用端口 5672 (如果先前安装了 MQ Light) ,那么需要更改 AMQP 通道所使用的端口。 使用 ALTER CHANNEL 命令更改端口:
    ALTER CHANNEL(SYSTEM.DEF.AMQP) CHLTYPE(AMQP) PORT(NEW PORT NUMBER)
    
  7. 如果您不想使用通道认证 (CHLAUTH) 规则来阻止或过滤与 AMQP 通道的连接,请按如下所示禁用队列管理器上的通道认证:
    alter qmgr chlauth(disabled) 
    
    建议不要禁用生产队列管理器上的连接认证。 您应在开发环境中禁用连接认证。

    或者,将队列管理器通道认证规则配置为允许与 AMQP 通道建立特定连接。

  8. 可选: 如果要在通道上启用 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)
    • [V8.0.0.15 2020 年 6 月]如果您将 SSLCAUTH 属性设置为 REQUIRED,那么可以检查来自客户机的证书的专有名称 (DN)。 要检查来自客户机的证书的专有名称,请设置 SSLPEER 属性。 使用 ALTER CHANNEL 命令检查来自客户机的证书的专有名称。 例如:
      ALTER CHANNEL(SYSTEM.DEF.AMQP) CHLTYPE(AMQP) SSLPEER (DN SPECIFICATION)
      或者,也可以使用通道认证记录来允许或阻止连接,因为相比于使用 SSLPEER 属性,此方法的详细程度更高。 有关设置 SSLPEER 和使用通道认证记录作为替代方法的更多信息,请参阅 SSL 同级
  9. 通过运行以下命令安装 MQ Light Node.js 客户机:
    npm install mqlight
    
  10. 浏览至 node_modules/mqlight/samples 目录,然后运行样本接收方应用程序:
    • 如果您使用的是缺省端口号,那么可以运行样本接收方应用程序:
      node recv.js
      
    • 如果已将 AMQP 通道配置为使用其他端口号,那么可以使用参数来指定新端口号以运行样本接收方应用程序:
      node recv.js -s amqp://localhost:6789
      
    如果成功连接到缺省通道,那么将显示以下消息:
    Connected to amqp://localhost:5672 using client-id recv_e79c55d
    Subscribed to pattern: public
    
    该应用程序现在已连接到队列管理器,并等待接收消息。 其预订了主题 public
    注: 除非使用 -i 参数指定 client-id ,否则将自动生成该参数。
  11. 在新的命令窗口中,浏览到 node_modules/mqlight/samples 目录,然后通过运行以下命令来运行样本发送方应用程序:
    node send.js
    
    在接收方应用程序的命令窗口中,Hello World消息。
  12. 可选: 使用 AMQSSUB IBM MQ 样本接收 MQ Light 样本消息。
    LinuxWindows上,可以在以下位置找到样本:
    • Linux上的 [Linux]mqinstall/samp/bin 目录。
    • Windows上的 [Windows]mqinstall/Tools\c\Samples\Bin 目录。
    1. 通过运行以下命令来运行该样本:
      amqssub public <QM-name>.
      
    2. 通过重新运行以下命令将消息发送到 IBM MQ 应用程序:
      node send.js
      
  13. 可选: 使用 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 的值。