[AIX、Linux 和 Windows]

开发 AMQP 客户机应用程序

针对 AMQP API 的 IBM® MQ 支持使 IBM MQ 管理员能够创建 AMQP 通道。 此通道在启动时会定义一个端口号以用于接受来自 AMQP 客户机应用程序的连接。

您可以在 AIX®, Linux®, and Windows 系统上安装 AMQP 通道; 它在 IBM iz/OS®上不可用。

AMQP 1.0 客户机应用程序可以连接到具有 AMQP 通道的队列管理器。

使用 Apache Qpid JMS 库开发应用程序

介绍

Apache Qpid JMS 库使用 AMQP 1.0 协议来提供 JMS 2 规范的实现。

Apache Qpid JMS 以不同于 MQ Light 消息传递 API 的方式使用 AMQP 1.0 协议的某些方面。 IBM MQ 9.2IBM MQ AMQP 通道添加支持,以便 Apache Qpid JMS 应用程序能够连接到 IBM MQ 并执行发布/预订消息传递,包括使用共享预订。

[MQ 9.3.0 2022 年 6 月]IBM MQ 9.3 添加了对 IBM MQ AMQP 通道的进一步支持,以便 Apache Qpid JMS 应用程序能够连接到 IBM MQ 并执行点到点消息传递。 请参阅 AMQP 通道上的点到点支持 以获取更多信息。

[MQ 9.3.0 2022 年 6 月]IBM MQ 9.3.0 添加了对 IBM MQ AMQP 通道的进一步队列浏览支持,以便 Apache Qpid JMS 应用程序可以连接到 IBM MQ 并从队列中执行消息浏览。 请参阅 AMQP 通道上的点到点支持 以获取更多信息。

[MQ 9.3.0 2022 年 7 月]IBM MQ 9.3.0 为 AMQP 通道添加了两个额外的通道属性: TMPMODELTMPQPRFX。 这些属性用于模型队列,创建临时队列时可以使用临时队列前缀。

与其他 IBM MQ 应用程序的相互通信

可以在 Apache Qpid JMS 应用程序与其他 IBM MQ 应用程序之间发送消息。 例如, Apache Qpid 应用程序可以发布主题上的消息, MQ Light 应用程序可以通过创建预订来接收这些消息。

Apache Qpid JMS 应用程序还可以发布由传统 IBM MQ 应用程序使用的消息,例如,使用 MQSUB API 调用来预订同一主题。

同样, Apache Qpid JMS 应用程序可以预订传统 IBM MQ 应用程序发布消息的 IBM MQ 主题。

只要两个客户机指定相同的共享名称和主题模式, Apache Qpid JMS 应用程序也可以与 MQ Light 应用程序共享预订。

请注意,为了执行此操作, Apache Qpid JMS 应用程序不得使用客户机标识进行连接。 这将确保两个应用程序使用的 IBM MQ 预订名称相同。

注意: Apache Qpid JMS 应用程序无法与 IBM MQ JMS 应用程序共享预订。

Apache Qpid JMS 限制
支持以下 JMS 功能:
  • 客户机确认、自动确认和重复确认模式 (DUPS_OK_ACKNOWLEDGE)
    • 使用凭证连接或不使用凭证连接
    • 在主题目标上创建使用者
    • 在主题目标上创建持久使用者
    • 在主题目标上创建共享使用者
    • 在主题目标上创建共享持久使用者
    • 客户机确认和自动确认模式
    • 消息确认和会话确认
    • 取消预订持久预订
    • [MQ 9.3.0 2022 年 6 月]创建临时队列
    • [MQ 9.3.0 2022 年 6 月]在队列或临时队列目标上创建使用者
    • [MQ 9.3.0 2022 年 6 月]JMS MessageListeners
    • [MQ 9.3.0 2022 年 6 月]要接收主体的 JMS 使用者; 名为 Consumer.receiveBody()JMS 2.0 方法
    • [MQ 9.3.0 2022 年 6 月]支持以下 JMS 消息类型:
      • BytesMessage
      • MapMessage
      • ObjectMessage
      • StreamMessage
      • TextMessage
    • [MQ 9.3.0 2022 年 6 月]从队列浏览消息
AMQP 客户机不支持以下 JMS 功能:
  • 使用事务性会话和事务性 JMSContext
    • 使用消息选择器
    • 使用 nolocal 属性
    • 使用事务性会话
    • 使用发送延迟
    • IBM MQ 9.3.0处,从队列浏览消息。
    • 使用同一个客户机标识和主题创建多个持久预订或使用者
    • [MQ 9.3.0 2022 年 6 月]JMS 临时主题
    • 不支持 AMQP 过滤器。

[MQ 9.3.3 2023 年 6 月]IBM MQ 9.3.3 开始,以下注释不再适用于 Continuous Delivery 用户。

[MQ 9.3.0 2022 年 6 月]注意: 客户机确认: 如果要使用任何未解决的消息 AMQP 传输,即,当需要客户机确认消息时,那么客户机必须通过在使用客户机确认方式时及时发送消息确认来及时解决,或者考虑将队列管理器属性 MARKINT (MsgMarkBrowseInterval) 设置为更高的值。

MsgMarkBrowseInterval 的缺省值为 5 秒。 如果应用程序未在该缺省值内得以解决,那么可能会看到重复消息。 要避免重复消息,必须相应地增大 MsgMarkBrowseInterval 的值,最好将其设置为 NOLIMIT ,以表示无限制的时间间隔。 如果在确定消息之前应用程序崩溃或断开连接,那么消息可供另一个应用程序使用。

请参阅 MsgMarkBrowseInterval 以获取更多信息。 由于这是队列管理器属性,因此您设置的值将适用于连接到该队列管理器的所有应用程序。

在 AMQP 上, MsgMarkBrowseInterval 仅对队列有效,而对预订有效。

下载样本 AMQP 客户机

IBM MQ 不提供 AMQP 客户机,但您可以下载 MQ Light 客户机或下载基于 Apache Qpid 库的开放式源代码 AMQP 客户机。 有关更多信息,请参阅 IBM MQ LightApache Qpid

您还可以下载基于 Apache Qpid 库的其他开放式源代码 AMQP 客户机。 有关更多信息,请参阅 https://qpid.apache.org/index.html
注意: IBM 支持人员无法为这些客户机包提供配置或缺陷支持,任何使用问题或代码缺陷报告都应指向相应的项目。

将 AMQP 客户机部署到 IBM MQ

当准备好部署应用程序时,此应用程序需要具备其他企业应用程序的所有监视、可靠性和安全性功能。 它还可以与其他企业应用程序交换数据。

部署 AMQP 客户机后,可以与 IBM MQ 应用程序交换消息。 例如,如果您使用 AMQP 客户机来发送 JavaScript 字符串消息,那么 IBM MQ 应用程序将接收到 MQ 消息,其中 MQMD 的格式字段设置为 MQSTR。

管理 AMQP 通道

可以采用与其他 MQ 通道相同的方式来管理 AMQP 通道。 您可以使用 MQSC 命令, PCF 命令消息或 IBM MQ Explorer 来定义,启动,停止和管理通道。 在 创建和使用 AMQP 通道中,提供了用于定义客户机并开始将客户机连接到队列管理器的示例命令。

启动 AMQP 通道后,您可以通过连接 AMQP 1.0 客户机对其进行测试。 例如,MQ Light、Apache Qpid Proton 或 Apache Qpid JMS。