Spring DefaultMessageListenerContainer 的 JMS 消息转换器

Spring JMS message converter for DefaultMessageListenerContainer

springJMS中的DefaultMessageListenerContainerclass有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 回调中处理转换?如果我错了,请纠正我。

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

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

所以,是的,它被忽略了一个简单的 MessageListener