配置Spring JMS Listener

时间:2017-04-26 02:31:09

标签: java jms ibm-mq spring-jms

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

  

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

传入消息有一个名为会计令牌的MQMD字段,我想阅读它。从阅读IBM doc,我需要将目标的 WMQ_MQMD_READ_ENABLED 属性设置为 true 。但是我配置JmsListener的方式只是注释中的String名称。我该如何设置此属性?

1 个答案:

答案 0 :(得分:2)

为目的地添加经过适当配置的@BeanMQQueue并设置所需的属性。)

然后将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实例。