Мы пытались отправить MAP (java.util) с использованием шаблона JMS, но на стороне клиента мы не можем прочитать сообщение, и во время запуска сервера Spring Boot @JMSListener жалуется на следующее сообщение, это отлично работает с WAS 7 но не с WAS Liberty 8.5.5, iam также включает фрагмент кода, а также различные форматы сообщений, которые мы получаем для разных версий сервера. Изменилось ли что-нибудь в WAS Liberty?
БЫЛА СВОБОДА - 7 -
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 ...
Ожидаемое сообщение ниже
JMSMessage class: jms_map
JMSType: null
JMSDeliveryMode: 2
JMSDeliveryDelay: 0
JMSDeliveryTime: 0
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: ID:414d51204d454d5154433120202020205ccc4b272634404a
JMSTimestamp: 1562783439854
JMSCorrelationID: null
JMSDestination: queue://- INFO IS THERE
JMSReplyTo: null
JMSRedelivered: false
JMSXAppID: WebSphere MQ Client for Java
JMSXDeliveryCount: 1
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: 18303986
Спасибо, мы действительно отправляем сообщения MAP, но мы устанавливаем targetClientId как «mq», что фактически добавляет к сообщению информацию, связанную с mq, с некоторыми дополнительными заголовками, после удаления targetClientId добавляется информация JMS, и сообщения отправляются как JMSMapMessage ( jms_map) и т.д. Проблема решена
Вы должны опубликовать ответ для себя, чтобы объяснить шаги для решения.
Сообщения WebSphere MQ помещаются моим приложением (приложением JMS) в очередь. Эти сообщения должны быть получены приложением jms. Я неправильно понял доступную опцию targetClientId, думая, что targetClientId нужно упоминать как «mq», если сообщения, в которых мы пишем, являются MQ, но это не так. Нам нужно установить targetClientId как MQ, только если мы сообщения обрабатываются не- JMS-приложение. Поскольку я устанавливал targetClientId как «MQ», он удалял заголовки RFH, необходимые для обработки сообщения JMS-приложением, и синтаксический анализ не выполнялся в приложении-потребителе.
<jmsQueue id = "MYAPP_QUEUE" jndiName = "jms/test/testq">
<properties.wmqJms
baseQueueName = "MYAPP.TEST.A"
persistence = "PERS"
targetClient = "MQ"/> -- removed this
</jmsQueue>
Я не знаю ничего в Liberty по сравнению с традиционным WAS, что было бы актуально. Отображаемое содержимое сообщения будет генерироваться клиентским приложением, которое в этих двух случаях будет отличаться. JMSXAppID в ожидаемом выводе говорит
WebSphere MQ Client for Java
, а в фактическом —jar
. Я бы предложил проверить, что приложение, отправляющее сообщение, отправляет JMS MapMessage.