【问题标题】:Spring JMS message converter for DefaultMessageListenerContainerDefaultMessageListenerContainer 的 Spring JMS 消息转换器
【发布时间】:2016-11-27 22:27:30
【问题描述】:

spring JMS中的DefaultMessageListenerContainer类有setter方法 setMessageConverter(...) 允许提供我们想要的任何转换器。

对于带注释的消息监听器,这是有意义的,因为我们可以直接定义

@JmsListener(destination = "myDestination")
public void processOrder(MyConvertedType data) { ... }

spring 将负责转换消息并将其传递给此侦听器。

因此,这对于带注释的侦听器显然是有意义的。我的问题是,设置消息转换器对非注释消息侦听器有用吗?类似的东西

public void registerListener(String queueName, MessageListener listener) {
        DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.setMessageConverter(getMessageConverter());
        container.setDestinationName(queueName);
        container.setMessageListener(listener);
        container.initialize();
        container.start();
}

从我在docs/javadocs中的搜索以及对源代码的有限理解来看,我认为为这种情况设置消息转换器没有帮助,即spring不会处理消息转换。必须在传递的 MessageListener 回调中处理转换?如果我错了,请纠正我。

【问题讨论】:

    标签: jms spring-jms


    【解决方案1】:

    仅在创建容器以支持 @JmsListener 注释时使用 - 转换器从容器工厂转移到容器,然后转移到用于调用带注释的 POJO 方法的 MessagingMessageListenerAdapter

    容器只是通过容器工厂配置适配器的管道。

    所以,是的,对于简单的MessageListener,它会被忽略。

    【讨论】:

    • 不要把代码放在cmets中;太难读了;并且不要在 cmets 中就 3 岁以上的答案提出新问题。提出一个新问题并适当地格式化您的代码。
    • 同意。感谢您的提醒。将改为写一个问题。
    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多