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

时间:2018-03-27 12:11:21

标签: 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 TXN_RCV_FRM_SYS TXNSYS850.QM删除“CRLF”时发出相同的响应消息,应用程序能够从QM中选择消息

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

  

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

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

  

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

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

1 个答案:

答案 0 :(得分:0)

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

您拥有的选项是:

  1. 修改发送应用,以便它不会发送包含CRLF作为最后两个字符的消息。
  2. 修改接收应用,以便忽略CRLF。
  3. 如果您无法更改发送或接收应用程序,那么唯一的另一个选择是在中间放置一些能够为您工作的东西,一个从一个队列中读取消息的简单程序,剥离CRLF并写入第二个队列。
  4. 与编码相关的更新

    附加到IBM Technote" Data Conversion under WebSphere MQ"详细介绍了编码和CCSID影响转换的方法。

      

    <强>编码

         

    编码通常用于表示此平台使用的方法   表示数字数据。有两种一般类型:

         
        
    • 'LittleEndian',由英特尔处理器使用(例如Windows,Linux on Intel)。在此编码中,最低有效数字显示在较低位   记忆位置,例如数字437将以十六进制表示为   X'BF01’ 。
    •   
    • “大尾端”。最重要的数字位于较低的内存位置。例如数字437将以十六进制表示为   X'01BF”。
    •   

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

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

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

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

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