Message 属性
下面概括了 Message 对象属性,并提供了指向更详细参考信息的链接。
| 属性的名称 | 描述 |
|---|---|
| JMS_IBM_CHARACTER_SET | 当 XMS 客户机将消息转发到其预期目标时,消息主体中的字符数据字符串所在的编码字符集或代码页的标识 (CCSID)。 在 XMS中,此属性具有数字值并映射到 CCSID。 但是,此属性基于 JMS 属性,因此具有字符串类型值并映射到表示此数字 CCSID 的 Java 字符集。 |
| JMS_IBM_ENCODING | 当 XMS 客户机将消息转发到其预期目标时,如何表示消息体中的数字数据。 |
| JMS_IBM_EXCEPTIONMESSAGE | 用于描述为何将消息发送到异常目标的文本。 此属性是只读属性。 |
| JMS_IBM_EXCEPTIONPROBLEMDESTINATION | 消息在发送到异常目标之前所处目标的名称。 |
| JMS_IBM_EXCEPTIONREASON | 用于指示为何将消息发送到异常目标的原因码。 |
| JMS_IBM_EXCEPTIONTIMESTAMP | 将消息发送到异常目标的时间。 |
| JMS_IBM_FEEDBACK | 用于指示报告消息性质的代码。 |
| JMS_IBM_FORMAT | 消息中应用程序数据的性质。 |
| JMS_IBM_LAST_MSG_IN_GROUP | 指示消息是否是消息组中的最后一条消息。 |
| JMS_IBM_MSGTYPE | 消息的类型。 |
| JMS_IBM_PUTAPPLTYPE | 发送消息的应用程序类型。 |
| JMS_IBM_PUTDATE | 发送消息的日期。 |
| JMS_IBM_PUTTIME | 发送消息的时间。 |
| JMS_IBM_REPORT_COA | 请求“到达时确认”报告消息,并指定报告消息中必须包含的原始消息的应用程序数据量。 |
| JMS_IBM_REPORT_COD | 请求“传递时确认”报告消息,并指定报告消息中必须包含的原始消息的应用程序数据量。 |
| JMS_IBM_REPORT_DISCARD_MSG | 请求在无法将消息传递到其预期目标时丢弃此消息。 |
| JMS_IBM_REPORT_EXCEPTION | 请求异常报告消息,并指定报告消息中必须包含的原始消息的应用程序数据量。 |
| JMS_IBM_REPORT_EXPIRATION | 请求到期报告消息,并指定报告消息中必须包含的原始消息的应用程序数据量。 |
| JMS_IBM_REPORT_NAN | 请求负面操作通知报告消息。 |
| JMS_IBM_REPORT_PAN | 请求正面操作通知报告消息。 |
| JMS_IBM_REPORT_PASS_CORREL_ID | 请求任何报告或应答消息的相关标识与原始消息的相关标识相同。 |
| JMS_IBM_REPORT_PASS_MSG_ID | 请求任何报告或应答消息的消息标识与原始消息的消息标识相同。 |
| JMS_IBM_RETAIN | 设置此属性可指示队列管理器将消息视作“保留发布”。 |
| JMS_IBM_SYSTEM_MESSAGEID | 用于在服务集成总线内唯一识别消息的标识。 此属性是只读属性。 |
| JMSX_APPID | 发送消息的应用程序名称。 |
| JMSX_DELIVERY_COUNT | 尝试传递消息的次数。 |
| JMSX_GROUPID | 消息所属消息组的标识。 |
| JMSX_GROUPSEQ | 消息在消息组中的序号。 |
| JMSX_USERID | 与发送消息的应用程序相关联的用户标识。 |
JMS_IBM_MQMD* 属性
IBM® Message Service Client for .NET 支持客户机应用程序使用 API 读取/写入 MQMD 字段。 它也允许访问 MQ 消息数据。 缺省情况下,已禁用对 MQMD 的访问,必须由应用程序使用 Destination 属性 XMSC_WMQ_MQMD_WRITE_ENABLED 和 XMSC_WMQ_MQMD_READ_ENABLED 来明确进行启用。 这两个属性相互独立。
除 StrucId 和 Version 以外的所有其他 MQMD 字段都作为额外的 Message 对象属性公开,并添加了前缀 JMS_IBM_MQMD。
JMS_IBM_MQMD* 属性的优先级高于其他属性(如上表中所述的 JMS_IBM*)。
发送消息
表示除 StrucId 和 Version 之外的所有 MQMD 字段。 这些属性仅仅是指 MQMD 字段;属性同时出现在 MQMD 和 MQRFH2 头中,不会设置或抽取 MQRFH2 中的版本。 除了 JMS_IBM_MQMD_BackoutCount 之外,以上任意属性都可以设置。 将忽略对 JMS_IBM_MQMD_BackoutCount 设置的任何值。
如果属性具有最大长度限制,而您提供的值过长,则该值会被截断。
对于某些属性,还必须在 Destination 对象上设置 XMSC_WMQ_MQMD_MESSAGE_CONTEXT 属性。 应用程序必须以相应的上下文权限运行才能使属性生效。 如果未将 XMSC_WMQ_MQMD_MESSAGE_CONTEXT 设置为相应的值,那么将忽略此属性值。 如果将 XMSC_WMQ_MQMD_MESSAGE_CONTEXT 设置为相应的值,但您对于队列管理器没有足够的上下文权限,那么将发出异常。 下面是一些要求 XMSC_WMQ_MQMD_MESSAGE_CONTEXT 具有特定值的属性。
- JMS_IBM_MQMD_UserIdentifier
- JMS_IBM_MQMD_AccountingToken
- JMS_IBM_MQMD_ApplIdentityData
- JMS_IBM_MQMD_PutApplType
- JMS_IBM_MQMD_PutApplName
- JMS_IBM_MQMD_PutDate
- JMS_IBM_MQMD_PutTime
- JMS_IBM_MQMD_ApplOriginData
接收消息
| 属性 | 描述 | 类型 |
|---|---|---|
| JMS_IBM_MQMD_REPORT | 报告消息的选项 | System.Int32 |
| JMS_IBM_MQMD_MSGTYPE | 消息类型 | System.Int32 |
| JMS_IBM_MQMD_EXPIRY | 消息生命周期 | System.Int32 |
| JMS_IBM_MQMD_FEEDBACK | 反馈或原因码 | System.Int32 |
| JMS_IBM_MQMD_ENCODING | 消息数据的数字编码 | System.Int32 |
| JMS_IBM_MQMD_CODEDCHARSETID | 消息数据的字符集标识 | System.Int32 |
| JMS_IBM_MQMD_FORMAT | 消息数据的格式名称 | System.String |
| JMS_IBM_MQMD_PRIORITY 注: 如果为 JMS_IBM_MQMD_PRIORITY 指定的值不在 0-9 范围内,那么此值将违反 JMS 规范。
|
消息优先级 | System.Int32 |
| JMS_IBM_MQMD_PERSISTENCE | 消息持久性 | System.Int32 |
| JMS_IBM_MQMD_MSGID 注: JMS 规范声明消息标识必须由 JMS 提供程序设置,并且必须唯一或为空。 如果为 JMS_IBM_MQMD_MSGID 指定了值,那么此值将复制到 JMSMessageID。 因此,此值不是由 JMS 提供程序设置,并且可能不唯一:此值违反了 JMS 规范。
|
消息标识 | 字节数组 注: 在消息上使用字节数组属性违反 JMS 规范。
|
| JMS_IBM_MQMD_CORRELID 注: 如果对 JMS_IBM_MQMD_CORRELID 指定以字符串 "ID:" 开头的值,那么此值将违反 JMS 规范。
|
相关标识 | 字节数组 注: 在消息上使用字节数组属性违反 JMS 规范。
|
| JMS_IBM_MQMD_BACKOUTCOUNT | 回退计数器 | System.Int32 |
| JMS_IBM_MQMD_REPLYTOQ | 应答队列的名称 | System.String |
| JMS_IBM_MQMD_REPLYTOQMGR | 应答队列管理器的名称 | System.String |
| JMS_IBM_MQMD_USERIDENTIFIER | 用户标识 | System.String |
| JMS_IBM_MQMD_ACCOUNTINGTOKEN | 记帐标记 | 字节数组 注: 在消息上使用字节数组属性违反 JMS 规范。
|
| JMS_IBM_MQMD_APPLIDENTITYDATA | 与身份有关的应用程序数据 | System.String |
| JMS_IBM_MQMD_PUTAPPLTYPE | 放置消息的应用程序的类型 | System.Int32 |
| JMS_IBM_MQMD_PUTAPPLNAME | 放置消息的应用程序的名称 | System.String |
| JMS_IBM_MQMD_PUTDATE | 消息的放置日期 | System.String |
| JMS_IBM_MQMD_PUTTIME | 消息放置的时间 | System.String |
| JMS_IBM_MQMD_APPLORIGINDATA | 与源有关的应用程序数据 | System.String |
| JMS_IBM_MQMD_GROUPID | 组标识 | 字节数组 注: 在消息上使用字节数组属性违反 JMS 规范。
|
| JMS_IBM_MQMD_MSGSEQNUMBER | 组内本地消息的序号 | System.Int32 |
| JMS_IBM_MQMD_OFFSET | 从逻辑消息开始的物理消息数据偏移量 | System.Int32 |
| JMS_IBM_MQMD_MSGFLAGS | 消息标志 | System.Int32 |
| JMS_IBM_MQMD_ORIGINALLENGTH | 原始消息的长度 | System.Int32 |
请参阅 MQMD 以获取更多详细信息。
示例
以下示例生成的消息将放入 MQMD.UserIdentifier 设置为“JoeBloggs”的队列或主题中。
// Create a ConnectionFactory, connection, session, producer, message
// ...
// Create a destination
// ...
// Enable MQMD write
dest.setBooleanProperty(XMSC_WMQ_MQMD_WRITE_ENABLED,
XMSC_WMQ_MQMD_WRITE_ENABLED_YES);
// Optionally, set a message context if applicable for this MD field
dest.setIntProperty(XMSC_WMQ_MQMD_MESSAGE_CONTEXT,
XMSC_WMQ_MDCTX_SET_IDENTITY_CONTEXT);
// On the message, set property to provide custom UserId
msg.setStringProperty(JMS_IBM_MQMD_USERIDENTIFIER, "JoeBloggs");
// Send the message
// ...在设置 JMS_IBM_MQMD_USERIDENTIFIER 之前,需要先设置 XMSC_WMQ_MQMD_MESSAGE_CONTEXT。 有关使用 XMSC_WMQ_MQMD_MESSAGE_CONTEXT 的更多信息,请参阅 Message 对象属性。
同样,可通过在收到消息前将 XMSC_WMQ_MQMD_READ_ENABLED 设置为 true,然后使用消息获取方法(如 getStringProperty)来抽取 MQMD 字段内容。 收到的任何属性均为只读。
此示例将从队列或主题中获取用于保存消息 MQMD.ApplIdentityData 字段值的值字段。
// Create a ConnectionFactory, connection, session, consumer
// ...
// Create a destination
// ...
// Enable MQMD read
dest.setBooleanProperty(XMSC_WMQ_MQMD_READ_ENABLED, XMSC_WMQ_MQMD_READ_ENABLED_YES);
// Receive a message
// ...
// Get required MQMD field value using a property
System.String value = rcvMsg.getStringProperty(JMS_IBM_MQMD_APPLIDENTITYDATA);