繁体   English   中英

从IBM MQ中的传入消息除去回车

[英]Remove carriage return from an incoming message in IBM MQ

要求是从IBM MQ中的传入消息中除去回车。

我们的应用程序期望响应消息中的字符长度为1579,但其结尾为1581,并带有“ CRLF”

当执行以下命令时
/ opt / mqm / samp / bin / amqsbcg TXN_RCV_FRM_SYS TXNSYS850.QM
长度-1581的1581字节

通过使用/ opt / mqm / samp / bin / amqsput删除“ CRLF”放置相同的响应消息TXN_RCV_FRM_SYS TXNSYS850.QM时,应用程序能够从QM中选择消息

请指导我进行任何配置设置,以从队列或QM级别删除这些字符

2018年3月28日问题已解决:-)

MQGMO_CONVERT
将上述值设置为true ...
此选项将消息中的应用程序数据转换为与MQGET调用的MsgDesc参数中指定的CodedCharSetId和Encoding值一致。 在将数据复制到Buffer参数之前,先对其进行转换。 转换过程将假定放置消息时指定的格式字段,以标识消息中数据的性质。 消息数据由队列管理器转换为内置格式,并由用户编写的出口转换为其他格式。 有关数据转换出口的详细信息,请参见数据转换。 如果转换成功,则从MQGET调用返回时,在MsgDesc参数中指定的CodedCharSetId和Encoding字段将保持不变。 如果仅转换失败,则返回未转换的消息数据。MsgDesc中的CodedCharSetId和Encoding字段设置为未转换的消息的值。 在这种情况下,完成代码为MQCC_WARNING。 无论哪种情况,这些字段都描述了字符集标识符和在Buffer参数中返回的消息数据的编码。 有关队列管理器为其执行转换的格式名称的列表,请参见MQMD-消息描述符中描述的格式字段。

CCSD在amqsbcg中工作和不工作的详细信息

不工作
编码:273 CodedCharSetId:1208
工作中
编码:546 CodedCharSetId:1208

没有可以完成从消息末尾删除CRLF的QUEUE或QM级别设置。

您有以下选项:

  1. 修改发送应用程序,以便它不会发送以CRLF作为最后两个字符的消息。
  2. 修改接收应用程序,以便它将忽略CRLF。
  3. 如果您无法更改发送或接收应用程序,那么唯一的选择是在中间放置一些可以帮助您完成工作的东西,一个简单的程序从一个队列中读取一条消息,剥离CRLF并写入第二个队列。

与编码有关的更新

随附于IBM技术说明“ WebSphere MQ下的数据转换 ”的PDF详细讨论了编码和CCSID如何影响转换。

编码方式

编码通常是指该平台用来表示数字数据的方法。 一般有两种类型:

  • “ LittleEndian”,由Intel处理器使用(例如Windows,Intel上的Linux)。 在这种编码中,最低有效位出现在较低的存储位置,例如,数字437(用十六进制表示)表示为X'BF01'。
  • “ BigEndian”。 最重要的数字在较低的内存位置。 例如,数字437将以十六进制表示为X'01BF'。

关于您的工作和非工作消息:

编码273对应于Unix(非Intel)操作系统,例如AIX或Solaris Spark,它被称为Big Endian。

编码546对应于Intel上的Linux和Windows操作系统,这被称为Little Endian。

在这两种情况下,您都有对应于UTF-8的CCSID 1208,它是一个可变字节字符集,每个字符可以具有一到四个字节。


我不确定为什么编码会影响您处理消息正文的能力。 您可以提供发送和接收应用程序的MQ队列管理器版本的详细信息,以及发送和接收应用程序的IBM MQ jar文件版本吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM