我们遇到了一个有趣的问题。
我们在 AS400 系统之间进行了集成,该系统以 EBCDIC 格式发送 MQ 消息,由 TIBCO BW MQ 插件拾取并进行处理。这些都是金融交易。
我们遇到的问题是,当数据元素(压缩十进制)包含奇数数字时,例如 251
-259
或 25001
-25999
等。TIBCO BW MQ 插件将数据元素解释为 151
-159
等。
因此,我们将 25125
金额解释为 15125
,导致交易计数缺失 100 美元(金额以美分为单位)。 TIBCO BW MQ 插件底层使用 Java,因此这可能是 Java 问题。 AS400 能够以 25125
发送和接收。但是,当我们从 MQ 资源管理器浏览消息时,我们也会看到数据元素值呈现为 15125
。
AS400 团队指出,由于他们能够以 25125
形式发送和接收,因此问题不在他们这边。以前有人遇到过类似的问题吗?如果是这样,你是如何解决的?这是 MQ 客户端的问题还是 AS400 MQ 传递消息的问题?
最佳答案
我对 TIBCO 不熟悉...
但一般来说,通过 MQ 传递打包数据是一个坏主意。
MQ 是多平台的,只有两种方式发送消息。作为字符串和原始字节。当您将其作为字符串发送时,它将根据所涉及的平台处理从一种编码到另一种编码的转换。
如您所见,将压缩十进制视为字符串是行不通的。
TIBCO 可能具有处理原始消息的功能,在 TIBCO(或您的 Java 应用程序?)中的某个位置,您必须配置 EBCDIC 到 ASCII (Unicode) 转换以及解压压缩的十进制字段。您还必须设置 MQ 来发送原始消息。
否则,您需要 IBM i 端解压数据,然后再将其作为 MQ 字符串消息发送。
关于java - MQ EBCDIC 数据转换 (25) 解释为换行并转换为 15 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32595419/