使用 JMSListener 接收 MQMessage 会产生一个由逗号分隔的整数组成的字符串
Receiving MQMessage using JMSListener results in a String of comma separated integers
我有一个项目正在使用 JMSListener
从 WebsphereMQ 队列中读取消息。我对此的要求之一是连接到多个队列并将它们放入 JMSListener
连接到的 "main" 队列。为此,我循环遍历队列列表并使用 IBM 的 MQ 包在循环中从队列进行浏览,然后写入 "main" 队列。这是我的读写方法(它们没有错,只是为了提供信息):
public String readFromErrorQueue(MyErrorQueue errorQueue,
MQGetMessageOptions getMsgOpts) throws MQException, IOException {
MQMessage msg = new MQMessage();
String message = "";
errorQueue.getQueue().get(msg, getMsgOpts);
message = msg.readStringOfCharLength(msg.getMessageLength());
return message;
}
public void writeToHoldQueue(String message) throws IOException,
MQException {
MQMessage mqMessage = new MQMessage();
mqMessage.writeString(message);
holdQueue.getQueue().put(mqMessage, putMsgOpts);
}
主要 JMSListener 的形式为:
@JmsListener(id ="mainQueue", destination = "${mq.queueName}")
public void processOrder(String message) throws Exception {...}
现在说说我的困境。当我的 JMSListener
收到消息时,它的格式是 "98, 122, 34, 190, ... , N"
而不是一串实际的单词。请注意,我输入的这些值是任意的,因为我不知道整数是否可以被破译为有意义的消息,并且 HIPPA 对这些东西非常严格......无论如何,消息应该是 HL7 或 XML留言。
调试中需要注意的几点;当我在队列中循环时,我可以看到 HL7/XML 消息,所以当我浏览它们时它们看起来很好。在我将它们写入 "main" 队列之前,它们看起来还不错。当它们在 "main" 队列中时,如果我打开 MQ Explorer 并查看当前在队列中的消息的内容,它们看起来很好。最后要注意的是,如果我从 MQ Explorer 将一条测试消息放到队列中,JMSListener
会很好地接收它。
所以这让我相信问题在于 MQ 如何使用 java 代码将消息放入队列,以及 JMSListener
如何将它们取下。我唯一能想到的是我的 writeToHoldQueue
将消息作为 MQMessage 放置,而我的 JMSListener
想要读取一个字符串。
所以我的怀疑是否正确,这是怎么回事?为什么我得到一长串看似随机的逗号分隔整数而不是错误?
所以这有点讽刺。原来我的 writeToHoldQueue()
出了点问题。挖掘之后(老实说把这个 post 当作小橡皮鸭),我意识到我有能力定义 MQMessage
格式。所以基本上我所有的问题都用这一行解决了...... mqMessage.format = MQConstants.MQFMT_STRING;
。现在我的听众正在拾取我需要的无乱码、正确的字符串。所以我的作家现在看起来像:
public void writeToHoldQueue(String message) throws IOException,
MQException {
MQMessage mqMessage = new MQMessage();
mqMessage.format = MQConstants.MQFMT_STRING;
mqMessage.messageType = MQConstants.MQMT_DATAGRAM;
mqMessage.writeString(message);
holdQueue.getQueue().put(mqMessage, putMsgOpts);
}
如果其他人遇到这个问题,我发现这两个方法有助于编写我的阅读和写作:
https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q030840_.htm
和
https://endrasenn.wordpress.com/2010/01/27/readwrite-to-ibm-mq-sample-java-code/
我有一个项目正在使用 JMSListener
从 WebsphereMQ 队列中读取消息。我对此的要求之一是连接到多个队列并将它们放入 JMSListener
连接到的 "main" 队列。为此,我循环遍历队列列表并使用 IBM 的 MQ 包在循环中从队列进行浏览,然后写入 "main" 队列。这是我的读写方法(它们没有错,只是为了提供信息):
public String readFromErrorQueue(MyErrorQueue errorQueue,
MQGetMessageOptions getMsgOpts) throws MQException, IOException {
MQMessage msg = new MQMessage();
String message = "";
errorQueue.getQueue().get(msg, getMsgOpts);
message = msg.readStringOfCharLength(msg.getMessageLength());
return message;
}
public void writeToHoldQueue(String message) throws IOException,
MQException {
MQMessage mqMessage = new MQMessage();
mqMessage.writeString(message);
holdQueue.getQueue().put(mqMessage, putMsgOpts);
}
主要 JMSListener 的形式为:
@JmsListener(id ="mainQueue", destination = "${mq.queueName}")
public void processOrder(String message) throws Exception {...}
现在说说我的困境。当我的 JMSListener
收到消息时,它的格式是 "98, 122, 34, 190, ... , N"
而不是一串实际的单词。请注意,我输入的这些值是任意的,因为我不知道整数是否可以被破译为有意义的消息,并且 HIPPA 对这些东西非常严格......无论如何,消息应该是 HL7 或 XML留言。
调试中需要注意的几点;当我在队列中循环时,我可以看到 HL7/XML 消息,所以当我浏览它们时它们看起来很好。在我将它们写入 "main" 队列之前,它们看起来还不错。当它们在 "main" 队列中时,如果我打开 MQ Explorer 并查看当前在队列中的消息的内容,它们看起来很好。最后要注意的是,如果我从 MQ Explorer 将一条测试消息放到队列中,JMSListener
会很好地接收它。
所以这让我相信问题在于 MQ 如何使用 java 代码将消息放入队列,以及 JMSListener
如何将它们取下。我唯一能想到的是我的 writeToHoldQueue
将消息作为 MQMessage 放置,而我的 JMSListener
想要读取一个字符串。
所以我的怀疑是否正确,这是怎么回事?为什么我得到一长串看似随机的逗号分隔整数而不是错误?
所以这有点讽刺。原来我的 writeToHoldQueue()
出了点问题。挖掘之后(老实说把这个 post 当作小橡皮鸭),我意识到我有能力定义 MQMessage
格式。所以基本上我所有的问题都用这一行解决了...... mqMessage.format = MQConstants.MQFMT_STRING;
。现在我的听众正在拾取我需要的无乱码、正确的字符串。所以我的作家现在看起来像:
public void writeToHoldQueue(String message) throws IOException,
MQException {
MQMessage mqMessage = new MQMessage();
mqMessage.format = MQConstants.MQFMT_STRING;
mqMessage.messageType = MQConstants.MQMT_DATAGRAM;
mqMessage.writeString(message);
holdQueue.getQueue().put(mqMessage, putMsgOpts);
}
如果其他人遇到这个问题,我发现这两个方法有助于编写我的阅读和写作: https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q030840_.htm
和 https://endrasenn.wordpress.com/2010/01/27/readwrite-to-ibm-mq-sample-java-code/