将消息体映射至 IBM MQ 格式以及从此格式映射消息体
IBM MQ 消息头 (MQRFH2) 和描述符 (MQMD) 可包含有关 IBM MQ 消息体的格式的信息。转换 IBM MQ 消息的格式时,服务集成使用 MQRFH2 和 MQMD 中包含的信息,并在将消息转换为 IBM MQ 格式时将此信息放到 MQRFH2 和 MQMD 中。
通过服务集成和 IBM MQ 在 JMS 程序之间交换消息
一般来说,不必知道消息格式之间的转换就可以在服务集成与 IBM MQ 之间交换 JMS 消息,原因是服务集成会自动执行适当转换,包括字符和数字编码。但是,如果 JMS 应用程序未按预期运行,或者服务集成配置包括用于处理到达或来自非 JMS IBM MQ 程序的消息的 JMS 程序或调解,那么您可能必须了解消息转换。
如果服务集成应用程序与 IBM MQ 应用程序交换 MapMessage 对象,那么可能必须指定非缺省映射消息编码格式。
IBM MQ 消息有效内容:格式指示
IBM MQ 格式消息包含以下两个有效内容格式指示:
- MQRFH2 <mcd> 文件夹,Msd 字段
- 此字段可包含有关有效内容格式的信息。这是“JMS 格式”信息。
- 服务集成将消息转换为 IBM MQ 格式时,它自动为 JMS 消息类设置适当值。
- 服务集成转换 IBM MQ 格式的消息时,它使用此字段中的值(如果存在包含该字段的 MQRFH2)来设置 JMS 消息类。
JMS 消息类 MQRFH2 <mcd> 文件夹,Msd 字段(“JMS 格式”) TextMessage jms_text BytesMessage jms_bytes StreamMessage jms_stream MapMessage jms_map ObjectMessage jms_object 消息 jms_none 如果未提供“JMS 格式”信息(例如,如果没有 MQRFH2),那么服务集成会根据“MQ 格式”设置 JMS 消息类。
有关 MQRFH2 <mcd> 文件夹的更多信息,请参阅 IBM MQ 文档中有关使用 Java 的内容。
- MQRFH2(或 MQMD)格式字段
MQRFH2(或 MQMD,如果没有 MQRFH2)格式字段包含有关有效内容格式的信息。这是“MQ 格式”信息。通常它包含 MQFMT_STRING 或 MQFMT_NONE,MQFMT_STRING 指示有效内容是字符数据(并且可被 IBM MQ 转换为另一代码页),MQFMT_NONE 指示有效内容并非字符数据。这些值适合大多数 JMS 消息,服务集成将消息转换为 IBM MQ 格式时,它会自动将此字段设置为下列其中一个值:
JMS 消息类 MQRFH2(或 MQMD)格式字段(“MQ 格式”) TextMessage MQFMT_STRING BytesMessage MQFMT_NONE StreamMessage MQFMT_STRING MapMessage MQFMT_STRING ObjectMessage MQFMT_NONE 消息 MQFMT_NONE 如果应用程序为需要不同格式值的 IBM MQ 应用程序构造消息,那么可通过将 JMS_IBM_Format 属性设置为必需值来覆盖先前表中的值。特定示例是 IBM MQ 应用程序需要另一个头(例如,用于 CICS® 网桥应用程序的 MQCIH 头)时。应用程序构造包含该头(后跟任何其他消息数据)的 BytesMessage 对象,然后通过将 JMS_IBM_Format 属性设置为对该头适合的值 (例如,对 MQCIH 头设置为 MQFMT_CICS)来替换缺省“MQ 格式”(MQFMT_NONE)。
服务集成转换 IBM MQ 格式的消息时,它将 JMS_IBM_Format 属性设置为“MQ 格式”字段中的值。如果未提供“JMS 格式”(例如,如果没有 MQRFH2),那么“MQ 格式”设置为 MQFMT_STRING 时服务集成会将 JMS 消息类设置为 TextMessage,否则设置为 BytesMessage。
有关 MQRFH2(或 MQMD)格式字段的更多信息,请参阅 IBM MQ 应用程序编程参考。
IBM MQ 消息有效内容:字符和数字编码
除格式字段外,MQRFH2(或 MQMD,如果没有 MQRFH2)包含用于标识消息有效内容的字符编码和数字编码的字段。
服务集成将消息转换为 IBM MQ 格式时,它会自动选择适合大多数 JMS 消息的缺省值(UTF-8 字符编码和大尾数法数字编码)。如果您的应用程序为需要其他字符编码或数字编码的 IBM MQ 应用程序构造消息,那么您可以通过将 JMS_IBM_Character_Set 属性设置为所需的编码字符集标识 (CCSID) 或将 JMS_IBM_Encoding 属性设置为所需的数字格式(或同时设置两者)来覆盖字符编码值。有关可以用于 JMS_IBM_Character_Set 和 JMS_IBM_Encoding 的值的信息,请参阅 IBM MQ 库中的文档。
JMS 消息的消息体在 IBM MQ 中编码为字符数据(TextMessage、StreamMessage 或 MapMessage)时,设置 JMS_IBM_Character_Set 会导致服务集成将 IBM MQ 消息体中的文本转换为编码字符集。
JMS 消息的消息体不是字符数据(BytesMessage 或 ObjectMessage)时,设置 JMS_IBM_Character_Set 不会导致服务集成转换字节;这对 IBM MQ 指示已使用指定编码字符集对消息体中的所有字符数据进行编码。如果 JMS_IBM_Format 的值是 IBM MQ 识别的格式,那么它可将该字符数据转换为接收应用程序所需的编码字符集。
服务集成转换 IBM MQ 格式的消息时,它会通过 MQRFH2(或 MQMD,如果没有 MQRFH2)中的字段设置 JMS_IBM_Character_Set 和 JMS_IBM_Encoding 属性。如果 JMS 消息是 TextMessage、StreamMessage、MapMessage 或 ObjectMessage,那么应用程序不会使用 JMS_IBM_Character_Set 和 JMS_IBM_Encoding 属性的值。如果 JMS 消息是 BytesMessage,那么 JMS 消息的主体是二进制数据。在此情况下,应用程序必须知道 JMS_IBM_Character_Set 和 JMS_IBM_Encoding 属性的值,原因是它们指示消息二进制数据中嵌入的任何字符数据或数字数据的编码。