我正在使用WebSphere MQ,并且我通过注释创建了一个JMS侦听器来读取传入的消息:
@JmsListener(destination =“$ {queues.input}”,containerFactory =“listenerFactory”)
传入消息有一个名为会计令牌的MQMD字段,我想阅读它。从阅读IBM doc,我需要将目标的 WMQ_MQMD_READ_ENABLED 属性设置为 true 。但是我配置JmsListener的方式只是注释中的String名称。我该如何设置此属性?
答案 0 :(得分:2)
为目的地添加经过适当配置的@Bean
(MQQueue
并设置所需的属性。)
然后将DefaultJmsListenerContainerFactory
配置为在其BeanFactoryDestinationResolver
媒体资源中使用destinationResolver
。
解析器也应该是@Bean
,因此它会获得对bean工厂的引用。
然后,${queues.input}
应解析为队列的bean名称,并且侦听器容器将使用该目标而不是默认目标解析器,后者将从Session
创建目标。
修改强>
只是为了澄清......
注释的destination
属性实际上是使用配置的Destination
解析为DestinationResolver
对象的目标名称。
默认解析程序(DynamicDestinationResolver
)只需调用session.createQueue()
或session.createTopic()
- 因此您可以获得JMS提供程序的客户端库为您提供的任何默认目标。
使用BeanFactoryDestinationResolver
,我们将目标名称解析为应用程序上下文中的bean,该应用程序上下文可以是完全配置的目标对象,适合您的提供者库。
因此,您只需将DMLC配置为使用BF解析器,可以直接(通过您尝试)或通过容器工厂 - 用于为找到的每个@JmsListener
创建DMLC,并将解析器传递给每个。因此,目标名称将解析为完全配置的Destination
实例。