JMS-слушатель для сообщений типа mutiply? - PullRequest
0 голосов
/ 19 апреля 2019

Мне нужно получать сообщения из очереди в формате JSON.Поэтому я реализовал сериализуемый / десериализуемый + приемник JMS для метода с аргументами моего класса POJO (простой JSON). Но когда я хочу получить сообщение не в формате JSON (например, String), моя программа, конечно, вылетает.Может быть, я должен создать двух слушателей JMS?Но тогда местом назначения второго прослушивателя должен быть другой канал очереди?

PS с использованием IBM MQ

//MyMessage is class with my POJO  

@Component
public class MyMessageListener {

    @Bean
    public MessageConverter converter() {
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter() {

            @Override
            public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
                TextMessage message = (TextMessage) super.toMessage(object, session);
                System.out.println("outgoing JSON: " + message.getText());
                return message;
            }

            @Override
            public Object fromMessage(Message message) throws JMSException, MessageConversionException {
                if (message instanceof TextMessage) {
                    try {
                        System.out.println("incoming JSON: " + ((TextMessage) message).getText());
                    } catch (JMSException e) { 
                        throw new MessageConversionException("Failed to convert JSON message content", e);
                    }
                } else {
                    throw new IllegalArgumentException("This receiver only processes text messages!");
                }
                return super.fromMessage(message);
            }
        };

        converter.setTargetType(MessageType.TEXT);
        converter.setTypeIdPropertyName("_type");
        return converter;
    }

    @JmsListener(destination = "${input.queue}")
    public static void listener(MyMessage myMessage) throws JMSException {
        System.out.println("msg: " + myMessage);
    }
}

1 Ответ

0 голосов
/ 24 апреля 2019

Это работает после того, как я удалил методы: toMessage и fromMessage (но конвертер остался), и теперь слушатель может получать все типы сообщений.

...