如何在配置 Spring JMS 监听器时设置 WMQ_MQMD_READ_ENABLED

How to set WMQ_MQMD_READ_ENABLED when config Spring JMS Listener

我正在使用 WebSphere MQ,我通过注释创建了一个 JMS 侦听器来读取传入的消息:

@JmsListener(destination = "${queues.input}", containerFactory = "listenerFactory")

传入消息设置了一个名为 Accounting Token 的 MQMD 字段,我想阅读它。通过阅读 IBM 文档,我需要将目标的 WMQ_MQMD_READ_ENABLED 属性 设置为 true。但是我配置JmsListener的方式只是注解中的一个String名称。如何设置此 属性?

为目标添加适当配置的 @BeanMQQueue 并设置了所需的属性)。

然后配置 DefaultJmsListenerContainerFactory 在其 destinationResolver 属性 中使用 BeanFactoryDestinationResolver

解析器也应该是 @Bean,因此它会引用 bean 工厂。

然后,${queues.input} 应该解析为队列的 bean 名称,侦听器容器将使用该目的地而不是默认的目的地解析器,后者从 Session.[=27= 创建目的地。 ]

编辑

只是为了澄清...

注释的 destination 属性 实际上是一个目标名称,使用配置的 DestinationResolver.

解析为 Destination 对象

默认解析器 (DynamicDestinationResolver) 仅调用 session.createQueue()session.createTopic() - 因此您可以获得 JMS 提供程序的客户端库为您提供的任何默认目标。

我们使用 BeanFactoryDestinationResolver 将目标名称解析为应用程序上下文中的 bean,它可以是完全配置的目标对象,为您的提供商的库量身定制。

因此,您只需将 DMLC 配置为直接(如您尝试的那样)或通过容器工厂使用 BF 解析器 - 容器工厂用于为找到的每个 @JmsListener 创建一个 DMLC 并通过解析器进入每个。因此目标名称被解析为完全配置的 Destination 实例。