在 spring jms 中定义没有 jms 命名空间的 ListenerContainer
Define ListenerContainer without the jms namespace in spring jms
我想为 jms:listener-container bean 分配一个 id 但不幸的是它没有 id 属性。例如,这不起作用
<jms:listener-container id="jmsListenerContainer" concurrency="${jms.consumer.concurrency}" >
<jms:listener id="queueHandler" destination="${jms.queue.name}" ref="queueListener" />
</jms:listener-container>
为了解决这个问题,我尝试使用 vanilla bean 定义来定义没有命名空间的容器,如下所示:
<bean id="jmsListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"
p:concurrency="${jms.consumer.concurrency}" p:connection-factory="jmsConnectionFactory"
p:messageListener-ref="jmsMessageListener">
</bean>
为了使它起作用,需要容器使用的 MessageListener 的实际实现 class,因为单独定义它不起作用
<jms:listener id="jmsMessageListener" destination="${jms.queue.name}" ref="queueListener" />
这会引发一个 The matching wildcard is strict, but no declaration can be found for element 'jms:listener'.
来自 AbstractMessageListenerContainer 的文档:By default, only a standard JMS MessageListener object or a Spring SessionAwareMessageListener object will be accepted.
这是非常不确定的,所以有人知道如何做到这一点吗?
我想对我自己的问题提出一个答案。使用 jms:listener
创建的默认侦听器 class 是 org.springframework.jms.listener.adapter.MessageListenerAdapter
这是基于 jms 命名空间的配置的完整替换:
<bean class="org.springframework.jms.listener.adapter.MessageListenerAdapter" id="jmsMessageListener"
p:delegate-ref="queueListener" />
<!-- Not using jms namespace, as it doesn't allow to specify bean id -->
<bean id="jmsListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"
p:concurrency="${jms.consumer.concurrency}" p:connection-factory-ref="jmsConnectionFactory"
p:messageListener-ref="jmsMessageListener" p:destinationName="${jms.queue.name}" >
</bean>
我想为 jms:listener-container bean 分配一个 id 但不幸的是它没有 id 属性。例如,这不起作用
<jms:listener-container id="jmsListenerContainer" concurrency="${jms.consumer.concurrency}" >
<jms:listener id="queueHandler" destination="${jms.queue.name}" ref="queueListener" />
</jms:listener-container>
为了解决这个问题,我尝试使用 vanilla bean 定义来定义没有命名空间的容器,如下所示:
<bean id="jmsListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"
p:concurrency="${jms.consumer.concurrency}" p:connection-factory="jmsConnectionFactory"
p:messageListener-ref="jmsMessageListener">
</bean>
为了使它起作用,需要容器使用的 MessageListener 的实际实现 class,因为单独定义它不起作用
<jms:listener id="jmsMessageListener" destination="${jms.queue.name}" ref="queueListener" />
这会引发一个 The matching wildcard is strict, but no declaration can be found for element 'jms:listener'.
来自 AbstractMessageListenerContainer 的文档:By default, only a standard JMS MessageListener object or a Spring SessionAwareMessageListener object will be accepted.
这是非常不确定的,所以有人知道如何做到这一点吗?
我想对我自己的问题提出一个答案。使用 jms:listener
创建的默认侦听器 class 是 org.springframework.jms.listener.adapter.MessageListenerAdapter
这是基于 jms 命名空间的配置的完整替换:
<bean class="org.springframework.jms.listener.adapter.MessageListenerAdapter" id="jmsMessageListener"
p:delegate-ref="queueListener" />
<!-- Not using jms namespace, as it doesn't allow to specify bean id -->
<bean id="jmsListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"
p:concurrency="${jms.consumer.concurrency}" p:connection-factory-ref="jmsConnectionFactory"
p:messageListener-ref="jmsMessageListener" p:destinationName="${jms.queue.name}" >
</bean>