【问题标题】:JMS listener for mutiply types od message?多种类型消息的 JMS 侦听器?
【发布时间】:2019-04-19 08:42:25
【问题描述】:

我需要从队列接收 JSON 格式的消息。所以我用我的 POJO 类的参数(简单的 JSON)为方法实现了可序列化/可反序列化 + JMS 接收器 但是当我想接收不是 JSON 格式的消息(例如字符串)时,我的程序当然崩溃了。 也许我必须创建两个 JMS 侦听器?但是第二个监听器的目的地必须是另一个队列通道?

附注使用 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);
    }
}

【问题讨论】:

  • 肯定可以检查你要处理的消息是JSON还是纯字符串?
  • 取决于您使用的 JSON 解析器库,但当数据不是有效的 JSON 时,它应该抛出类似 ParseException 的东西。解析时应该捕获 ParseException
  • 删除方法后它的工作:toMessage和fromMessage(但转换器保留)现在监听器可以接收所有类型的消息。

标签: java spring-boot ibm-mq


【解决方案1】:

我删除方法后它的工作:toMessage和fromMessage(但转换器保留)现在监听器可以接收所有类型的消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    相关资源
    最近更新 更多