Чтение и запись сообщений в MQ от WAS Liberty - PullRequest
1 голос
/ 11 июля 2019

Мы пытались отправить MAP (java.util), используя шаблон JMS, но на стороне клиента мы не можем прочитать сообщение, и во время запуска сервера весенняя загрузка @JMSListener жалуется на следующее сообщение, это работает нормальнос WAS 7, но не с WAS Liberty 8.5.5, в том числе с фрагментом кода, а также с разными форматами сообщений, которые мы получаем для разных версий сервера.Что-нибудь изменилось в WAS Liberty?

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]

сообщение MAP

 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

1 Ответ

1 голос
/ 15 июля 2019

Сообщения 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>
...