[AIX、Linux 和 Windows]

将 AMQP 字段映射到 IBM MQ 字段 (入局消息)

当 AMQP 通道接收消息并将其放入 IBM® MQ时,它会将 AMQP 消息的某些属性传播到等效的 IBM MQ 消息属性中。

映射入站 AMQP 消息时,以下限制适用:
  • 如果属性部分中的 message-idcorrelation-id 字段是 uuid 或 ulong ,那么将拒绝该消息。
  • 任何 message-annotations 都会导致消息被拒绝。
  • 允许使用 delivery-annotationsfooter 部分,但不会将其传播到 IBM MQ 消息中。

以下子部分显示 AMQP 消息的 IBM MQ 表达式。

消息描述符

表 1. AMQP 消息的消息描述符
字段
StrucId MQMD_STRUC_ID
版本 MQMD_VERSION_1
报告 MQRO_NONE
MsgType MQMT_DATAGRAM
到期 AMQP 消息头中 ttl 字段获取的值
反馈 MQFB_NONE
编码 MQENC_NORMAL
CodedCharSetId 1208 (UTF-8)
格式 参见有效内容
Priority 从 AMQP 消息头中的 priority 字段获取的值。 如果设置了该项,那么限制为最多 9 个。 如果未设置该项,那么将使用缺省值 4。
持久 如果 AMQP 消息头中的 durable 字段设置为 true ,请设置为 MQPER_PERSISTENT。 否则,设为 MQPER_NOT_PERSISTENT。
MagId 队列管理器分配唯一的 24 字节 MsgId。
Correlld 从 AMQP 属性的 correlation-id 字段中获取的值 (如果已设置)。 设置为 24 字节二进制值。 否者,设置为 MQCI_NONE/。
BackoutCount 0
ReplyToQ [MQ 9.3.0 2022 年 6 月]从 AMQP 属性中的 reply-to 字段获取的值 (如果已设置)。 否则,设置为 ""。
ReplyToQMgr ""
[MQ 9.3.0 2022 年 6 月]报告 派生自 AMQP 应用程序属性中设置的任何 JMS IBM 报告属性的值。
UserIdentifier 设置为连接 AMQP 通道的已认证的用户的标识
AccountingToken MQACT_NONE
ApplIdentityData 十六进制字符串。 设置为 AMQP 通道的 MQ 连接标识的最后 8 个字节。
PutApplType MQAT_AMQP
PutApplName  
PutDate 从 AMQP 属性的 creation-time 字段中获取的值 (如果已设置)。 否则,设为当前日期。
PutTime 从 AMQP 属性的 creation-time 字段中获取的值 (如果已设置)。 否则,设为当前时间。
ApplOriginData ""

消息属性

设置消息属性有两个原因:
  • 允许通过队列管理器传播 AMQP 消息的部分,而不影响消息的有效内容。
  • 允许选择 application-properties
下表显示从 AMQP 消息设置的属性:
表 2. AMQP 消息属性
属性名 MQRFH2 名称 类型 描述
AMQPListener mq_amqp.Lis MQTYPE_STRING AMQP 通道的识别字符串。 用于生成消息,以便相关方(例如诊断问题的服务团队)可以知道是哪个版本放入消息。 值不由队列管理器进行验证,且不得在外部进行记录。
AMQPVersion mq_amqp.Ver MQTYPE_STRING AMQP 消息的版本。 如果不存在,假定为“1.0”。 值不由队列管理器进行验证。
AMQPClient mq_amqp.Cli MQTYPE_STRING API 的识别字符串。 用于发送 AMQP 消息至通道,以便相关方(例如诊断问题的服务团队)可以知道是哪个版本放入消息。 值不由队列管理器进行验证,且不得在外部进行记录。
AMQPDurable mq_amqp.Hdr.Dur MQTYPE_BOOLEAN AMQP 消息头中 durable 字段的值 (如果已设置)。
AMQPPriority mq_amqp.Hdr.Pri MQTYPE_INT32 AMQP 消息头中 priority 字段的值 (如果已设置)。
AMQPTtl mq_amqp.Hdr.Ttl MQTYPE_INT64 AMQP 消息头中 ttl 字段的值 (如果已设置)。
AMQPFirstAcquirer mq_amqp.Hdr.Fac MQTYPE_BOOLEAN AMQP 消息头中 first-acquirer 字段的值 (如果已设置)。
AMQPDeliveryCount mq_amqp.Hdr.Dct MQTYPE_INT64 AMQP 消息头中 delivery-count 字段的值 (如果已设置)。
AMQPMsgId mq_amqp.Prp.Mid MQTYPE_STRING AMQP 属性 message-id 字段的值 (如果设置为字符串)。
    MQTYPE_BYTE_STRING AMQP 属性 message-id 字段的值 (如果设置为字节字符串)。
AMQPUserId mq_amqp.Prp.Uid MQTYPE_BYTE_STRING AMQP 属性 (如果已设置) 中 user-id 字段的值。
AMQPTo mq_amqp.Prp.To MQTYPE_STRING AMQP 属性 (如果已设置) 中 to 字段的值。
AMQPSubject mq_amqp.Prp.Sub MQTYPE_STRING AMQP 属性 (如果已设置) 中 subject 字段的值。
AMQPReplyTo mq_amqp.Prp.Rto MQTYPE_STRING AMQP 属性 (如果已设置) 中 reply-to 字段的值。
AMQPCorrelationId mq_amqp.Prp.Cid MQTYPE_STRING AMQP 属性 correlation-id 字段的值 (如果设置为字符串)。
    MQTYPE_BYTE_STRING AMQP 属性 correlation-id 字段的值 (如果设置为字节字符串)。
AMQPContentType mq_amqp.Prp.Cnt MQTYPE_STRING AMQP 属性 (如果已设置) 中 content-type 字段的值。
AMQPContentEncoding mq_amqp.Prp.Cne MQTYPE_STRING AMQP 属性 (如果已设置) 中 content-encoding 字段的值。
AMQPAbsoluteExpiryTime mq_amqp.Prp.Aet MQTYPE_STRING AMQP 属性 (如果已设置) 中 absolute-expiry-time 字段的值。
AMQPCreationTime mq_amqp.Prp.Crt MQTYPE_STRING AMQP 属性 (如果已设置) 中 creation-time 字段的值。
AMQPGroupId mq_amqp.Prp.Gid MQTYPE_STRING AMQP 属性 (如果已设置) 中 group-id 字段的值。
AMQPGroupSequence mq_amqp.Prp.Gsq MQTYPE_INT64 AMQP 属性 (如果已设置) 中 group-sequence 字段的值。
AMQPReplyToGroupId mq_amqp.Prp.Rtg MQTYPE_STRING AMQP 属性 (如果已设置) 中 reply-to-group-id 字段的值。

AMQP 消息中的每个应用程序属性都设置为 IBM MQ 消息属性。 必须以相同的字节对字节重新构成 application-properties 部分,因此以下限制适用:

  • 如果 MQSETMP 验证代码拒绝应用程序属性,消息将被拒绝。 例如:
    • 属性名称长度限制为 MQ_MAX_PROPERTY_NAME_LENGTH。
    • 属性名称必须遵循 Java 语言规范 for Java 标识定义的规则。
    • 属性名不得以 JMSusr.JMS 开头,但已记录的可设置的 JMS 属性除外。
    • 属性名不能是 SQL 关键字。
  • 包含 Unicode 字符 U+002E (".") 的应用程序属性导致消息被拒绝。 属性必须在 JMS 使用的“usr”属性组中可以表述。
  • 仅支持空值、布尔值、字节、简短型、整数、长整型、浮点型、双精度值、二进制和字符串属性。 任何其他类型的应用程序属性将导致消息被拒绝。
[MQ 9.3.0 2022 年 6 月]您可以使用 application-properties设置以下 JMS 属性:请注意,属性名称和值与等效的 映射特定于 JMS 提供程序的字段 详细信息一致,并且将忽略无效的值。

有效内容

  • 对于具有单个二进制数据部分的 AMQP body ,二进制数据 (不包括 AMQP 位) 将作为 IBM MQ 有效内容放置,格式为 MQFMT_NONE。
  • 对于具有单个字符串数据部分的 AMQP body ,字符串数据 (不包括 AMQP 位) 将作为 IBM MQ 有效内容放置,格式为 MQFMT_STRING。
  • 否则, AMQP body 将以 MQFMT_AMQP 格式按原样构成有效内容。