JMS TextMessage(IBM MQ 消息)中的尾随空格被修剪掉

问题描述 投票:0回答:1

我创建了一条固定长度的文本消息,在某些情况下可能包含尾随空格。由于某种原因,这些尾随空格被修剪掉。在

send
上调用
MessageProducer
方法之前,该消息看起来很好,但在 IBM WebSphere MQ Explorer 中它已经被截断。

private function buildTextMessage(text: String, encoding: String): TextMessage {
  var message = _queueSession.createTextMessage()
  message.setText( encoding == null ? text : new String(text.getBytes(encoding)))
  return message
}

上面的函数被调用,参数如下: text - 2034 个字符长的字符串(消息内容) 编码 - 字符串“UTF-8”

为了创建和发送消息,我使用 javax.jms-api-2.0 库进行 MQ 连接,我使用 IBM 客户端版本 9.2.5.0。

我需要设置任何 MQ 属性来防止这种情况发生吗?

我查看了

MQQueueConnectionFactory
QueueSender
(
MessageProducer
) 和
Message
对象的所有属性,我发现唯一有趣的是压缩,所以我设置了这些属性:

mqQueueConnectionFactory.setMsgCompList({WMQConstants.WMQ_COMPMSG_NONE})
mqQueueConnectionFactory.setHdrCompList({WMQConstants.WMQ_COMPHDR_NONE})

但这也没有帮助。除了这两个和其他与连接相关的属性(例如通道、端口、主机、队列管理器和应用程序名称)之外,我还有这些:

mqQueueConnectionFactory.setTransportType((WMQConstants.WMQ_CM_CLIENT))
mqQueueConnectionFactory.setTargetClientMatching(true)

对于 QueueSender 对象,我有这些:

sender.setTimeToLive(60000)
(sender.Destination as MQDestination).setTargetClient(WMQConstants.WMQ_CLIENT_NONJMS_MQ)

对于

Message
对象,我仅调用
setText
setJMSCorrelationID

目前,我必须通过在消息末尾添加虚拟字符来应用解决方法,它工作正常,但看起来不太好。

jms ibm-mq
1个回答
0
投票

为了能够在使用 MQ Explorer 查看消息时查看消息中是否确实存在尾随空白,这里有一个建议:

在队列上右键单击上下文菜单,打开“消息浏览器”。

您可能会发现“数据长度”列令人放心,因为它将包含包含空格的长度。但是,继续,双击您担心的消息以打开“消息属性”对话框。在此对话框中,使用 LHS 导航更改至“数据”部分。

在这里,您将看到一个名为“消息数据”的字段,如果您突出显示该字段,我想确实会显示字符串中的尾随空格已被截断以用于显示目的。我相信这就是您的问题所报告的内容。

但是,由于您担心尾随空格实际上可能在消息到达队列之前被截断,因此您应该使用“消息数据字节”下方的下一个字段,这将显示尾随空格仍然存在。

© www.soinside.com 2019 - 2024. All rights reserved.