![[AIX、Linux 和 Windows]](ngalw.gif)
将 AMQP 字段映射到 IBM MQ 字段 (入局消息)
当 AMQP 通道接收消息并将其放入 IBM® MQ时,它会将 AMQP 消息的某些属性传播到等效的 IBM MQ 消息属性中。
映射入站 AMQP 消息时,以下限制适用:
- 如果属性部分中的
message-id或correlation-id字段是 uuid 或 ulong ,那么将拒绝该消息。 - 任何
message-annotations都会导致消息被拒绝。 - 允许使用
delivery-annotations和footer部分,但不会将其传播到 IBM MQ 消息中。
以下子部分显示 AMQP 消息的 IBM MQ 表达式。
消息描述符
| 字段 | 值 |
|---|---|
| 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 | 从 AMQP 属性中的 reply-to 字段获取的值 (如果已设置)。 否则,设置为 ""。 |
| ReplyToQMgr | "" |
报告 |
派生自 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。
| 属性名 | 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 标识定义的规则。
- 属性名不得以
JMS或usr.JMS开头,但已记录的可设置的 JMS 属性除外。 - 属性名不能是 SQL 关键字。
- 包含 Unicode 字符 U+002E (".") 的应用程序属性导致消息被拒绝。 属性必须在 JMS 使用的“usr”属性组中可以表述。
- 仅支持空值、布尔值、字节、简短型、整数、长整型、浮点型、双精度值、二进制和字符串属性。 任何其他类型的应用程序属性将导致消息被拒绝。
您可以使用 application-properties设置以下 JMS 属性:- JMS_IBM_REPORT_EXCEPTION
- JMS_IBM_REPORT_EXPIRATION
- JMS_IBM_REPORT_COA
- JMS_IBM_REPORT_COD
- JMS_IBM_REPORT_PAN
- JMS_IBM_REPORT_NAN
- JMS_IBM_REPORT_PASS_MSG_ID
- JMS_IBM_REPORT_PASS_CORREL_ID
- JMS_IBM_REPORT_DISCARD_MSG
有效内容
- 对于具有单个二进制数据部分的 AMQP
body,二进制数据 (不包括 AMQP 位) 将作为 IBM MQ 有效内容放置,格式为 MQFMT_NONE。 - 对于具有单个字符串数据部分的 AMQP
body,字符串数据 (不包括 AMQP 位) 将作为 IBM MQ 有效内容放置,格式为 MQFMT_STRING。 - 否则, AMQP
body将以 MQFMT_AMQP 格式按原样构成有效内容。