如何在配置 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名称。如何设置此 属性?
为目标添加适当配置的 @Bean
(MQQueue
并设置了所需的属性)。
然后配置 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
实例。
我正在使用 WebSphere MQ,我通过注释创建了一个 JMS 侦听器来读取传入的消息:
@JmsListener(destination = "${queues.input}", containerFactory = "listenerFactory")
传入消息设置了一个名为 Accounting Token 的 MQMD 字段,我想阅读它。通过阅读 IBM 文档,我需要将目标的 WMQ_MQMD_READ_ENABLED 属性 设置为 true。但是我配置JmsListener的方式只是注解中的一个String名称。如何设置此 属性?
为目标添加适当配置的 @Bean
(MQQueue
并设置了所需的属性)。
然后配置 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
实例。