【发布时间】:2015-10-03 02:45:05
【问题描述】:
我们遇到了一个有趣的问题。
我们在 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 传递消息的问题?
【问题讨论】:
-
PackedDecimal 数字应该包含奇数位数,因为符号(最后一个半字节)占用 1 位数的空间(最后一个半字节)。如果 MQ 资源管理器对数字的解释不正确,那么这不太可能是客户端的问题。最高位总是递减 1 还是右移?试试501和401,它们都变成201了吗?还是 401 和 301?
-
只有25系列才会出现这种情况,其他都很好。显然 25 是换行符表示,在解析数据时被替换为 15
-
我们在工程构建上与 TIBCO 支持反复讨论,结果证明是 MQ 客户端存在问题。如果 MQ 客户端有支持或者它是开源的,有没有人有任何见解。
标签: java ibm-mq ibm-midrange mq tibco