Ibm mq 从WAS Liberty读取消息并将其写入MQ
我们试图使用JMS模板发送MAP(java.util),但在客户端,我们无法读取消息,在服务器启动期间,spring boot@JMSListener抱怨如下消息,该消息适用于WAS 7,但不适用于WAS Liberty 8.5.5,iam还包括代码片段以及我们为不同版本的服务器接收的不同消息格式。自由时代有什么变化吗 是自由-7-Ibm mq 从WAS Liberty读取消息并将其写入MQ,ibm-mq,websphere-liberty,spring-jms,Ibm Mq,Websphere Liberty,Spring Jms,我们试图使用JMS模板发送MAP(java.util),但在客户端,我们无法读取消息,在服务器启动期间,spring boot@JMSListener抱怨如下消息,该消息适用于WAS 7,但不适用于WAS Liberty 8.5.5,iam还包括代码片段以及我们为不同版本的服务器接收的不同消息格式。自由时代有什么变化吗 是自由-7- at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:116) ~[spring-messaging-5.1.3.RELEASE.jar!/:5.1.3.RELEASE]
2019-07-05T13:07:14.357-05:00 [APP/PROC/WEB/0] [OUT] at org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:114) ~[spring-jms-5.1.3.RELEASE.jar!/:5.1.3.RELEASE]
2019-07-05T13:07:14.357-05:00 [APP/PROC/WEB/0] [OUT] ... 10 common frames omitted
2019-07-05T13:07:14.393-05:00 [APP/PROC/WEB/0] [OUT] 2019-07-05 18:07:14.370 WARN 20 --- [enerContainer-1] o.s.j.l.DefaultMessageListenerContainer : Execution of JMS message listener failed, and no ErrorHandler has been set.
2019-07-05T13:07:14.394-05:00 [APP/PROC/WEB/0] [OUT] org.springframework.jms.listener.adapter.ListenerExecutionFailedException: Listener method 'public void com.aa.amps.base.task.finalize.BaseBowUpdateListener.receiveMessage(javax.jms.MapMessage)' threw exception; nested exception is org.springframework.jms.support.converter.MessageConversionException: Could not find type id property [_type] on message [ID:414d51204d454d5154433120202020205ccc4b2725acdc4c] from destination [null]
信息是地图
jmsTemplate.convertAndSend(destination, message, new MessagePostProcessor() {
@Override
public Message postProcessMessage(Message message) throws JMSException {
message.setJMSReplyTo(null);
LOGGER.info("In BaseBowUpdateSender - send() message to AMPS-BASE QUEUE : {} ", message);
return message;
}
});
WAS-LIBERTY消息格式
JMSMessage class: jms_text
JMSType: null
JMSDeliveryMode: 2
JMSDeliveryDelay: 0
JMSDeliveryTime: 0
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: ID:414d51204d454d5154433120202020205ccc4b272634ce4d
JMSTimestamp: 1562784513140
JMSCorrelationID: null
JMSDestination: null
JMSReplyTo: null
JMSRedelivered: true
JMSXAppID: jar
JMSXDeliveryCount: 193
JMSXUserID: apmqstc
JMS_IBM_Character_Set: UTF-8
JMS_IBM_Encoding: 273
JMS_IBM_Format: MQSTR
JMS_IBM_MsgType: 8
JMS_IBM_PutApplType: 28
JMS_IBM_PutDate: 20190710
JMS_IBM_PutTime: 18483314
<map><elt name="trackType">03</elt><elt name="lastDefferDate">07/10/2019</elt><elt name="packageDesc ...
WebSphere MQ消息由我的应用程序(JMS应用程序)放入队列。这些消息将由jms应用程序拾取。我误解了可用的targetClientId选项,认为如果我们写入的消息是mq,则需要将targetClientId称为“mq”,但事实并非如此。只有当消息由非jms应用程序处理时,我们才需要将targetClientId设置为mq。当我将targetClientId设置为“MQ”时,它会剥离JMS应用程序处理消息所需的RFH头,并且在使用应用程序处解析失败
<jmsQueue id="MYAPP_QUEUE" jndiName="jms/test/testq">
<properties.wmqJms
baseQueueName="MYAPP.TEST.A"
persistence="PERS"
targetClient="MQ"/> -- removed this
</jmsQueue>
--删除这个
我不知道Liberty和traditional中有什么相关内容。显示的mesage内容将由客户端应用程序生成,这两种情况下似乎有所不同。预期输出中的JMSXAppID表示webspheremqclientforjava
,实际输出表示jar
。我建议检查发送消息的应用程序是否正在发送JMS MapMessage。谢谢,我们确实在发送MAP消息,但我们将targetClientId设置为“mq”,这实际上是在消息中添加mq相关信息和一些附加头,删除targetClientId后,会添加JMS信息,并以JMSMapMessage(JMS_映射)等形式发送消息。问题已得到解决。您应该发布自我回答,以解释解决步骤。
<jmsQueue id="MYAPP_QUEUE" jndiName="jms/test/testq">
<properties.wmqJms
baseQueueName="MYAPP.TEST.A"
persistence="PERS"
targetClient="MQ"/> -- removed this
</jmsQueue>