编写数据转换出口
此主题集合包含了有关如何编写数据转换出口的信息。
执行 MQPUT 时,应用程序会创建消息的消息描述符 (MQMD)。 由于 IBM® MQ 需要能够了解 MQMD 的内容,而不考虑它是在哪个平台上创建的,因此系统会自动对其进行转换。
但是,无法自动转换应用程序数据。 如果字符数据正在 CodedCharSetId 和 Encoding 字段不同的平台之间进行交换(例如,ASCII 和 EBCDIC 之间),应用程序必须安排消息的转换。 队列管理器自身或用户出口程序可以执行应用程序数据转换,并将其称为数据转换出口。 如果应用程序数据为某种内置格式(如 MQFMT_STRING),那么队列管理器可以使用某个内置的转换例程自行执行数据转换。 本主题包含有关 IBM MQ 在应用程序数据未采用内置格式时提供的数据转换出口工具的信息。
在 MQGET 调用期间,可以将控制传递给数据转换出口。 这避免了在到达最终目标之前跨多个不同平台进行转换。 但是,如果最终目标是一个不支持在 MQGET 上进行数据转换的平台,那么您必须在将数据发送至其最终目标的发送方通道上指定 CONVERT(YES)。 这将确保 IBM MQ 在传输期间转换数据。 在这种情况下,数据转换出口必须位于已定义发送方通道的系统上。
MQGET 调用由应用程序直接发布。 将 MQMD 中的 CodedCharSetId 和 Encoding 字段设置为所需的字符集和编码。 如果应用程序使用与队列管理器相同的字符集和编码,那么将 CodedCharSetId 设置为 MQCCSI_Q_MGR,并将 Encoding 设置为 MQENC_NATIVE。 在 MQGET 调用完成之后,这些字段便具有了与返回的消息数据相应的值。 如果转换不成功,这些值可能与所需的值不同。 应用程序应将这些字段重置为每次调用 MQGET 之前所需的值。
要调用的数据转换出口所需的条件是针对 MQGET中的 MQGET 调用定义的。
有关传递到数据转换出口的参数的描述以及详细的用法说明,请参阅 MQ_DATA_CONV_EXIT 调用和 MQDXP 结构的 数据转换 。
在不同机器编码和 CCSID 之间转换应用程序数据的程序必须符合 IBM MQ 数据转换接口 (DCI)。
| 操作系统 | 库 |
|---|---|
AIX® |
32 位及 64 位:libmqm.a 和 libmqm_r.a |
IBM i |
LIBMQM 和 LIBMQM_R |
Linux® |
32 位及 64 位:libmqm.so 和 libmqm_r.so |
Windows |
32 位及 64 位:mqm.dll 和 mqm.pdb |
![[AIX]](ngaix.gif)
![[IBM i]](ngibmi.gif)
![[Linux]](nglinux.gif)
![[Windows]](ngwin.gif)