java使用Spring的JMS命名空间时,侦听器容器的id是什么?
根据JMS名称空间标记的Spring Documentation(即<jms:listener-container>
),对于<jms:listener-container>
元素没有id
属性
如果侦听器容器bean没有id
,如何从其他bean定义中引用它
例如,假设已定义以下侦听器容器:
<jms:listener-container acknowledge="auto"
connection-factory="queueConnectionFactoryBean"
container-type="default"
destination-resolver="jndiDestinationResolver"
destination-type="queue"
message-converter="myConverter">
<jms:listener ref="myListenerPOJO" id="myQueueListener"
method="processThePOJO" destination="${myQueueListener.queue.jndiName}" />
</jms:listener-container>
我想定义一个使用上述容器的入站网关。我将使用什么作为入站网关定义的container
属性
例如:
<int-jms:inbound-gateway
request-channel="inboundChannel"
id="messageChannelAdapter"
container="**What Goes Here?**"
reply-channel="outboundChannel" />
还是我误解了侦听器容器和网关之间的关系
# 1 楼答案
listener-container
元素不是用来配置独立的JMS侦听器容器的。它将作为所有封闭的listener
标记的蓝图。在运行时,实际发生的是为每个封闭的listener
构造一个JMS侦听器容器。因此,不是单个容器而是多个容器正如@artembilan提到的,容器的id被设置为侦听器的id。然而,当您将侦听器重新用于spring集成时,它将使侦听器变得无用。侦听器容器只能连接一个MessageListener,不能连接多个MessageListener
如果您想为Spring集成网关使用侦听器容器,您必须使用
*MessageListenerContainer
类之一自己构造一个侦听器容器# 2 楼答案
正如Marten所说,
listener-container
对每个listener
子元素的MessageListenerContainer
豆子进行蛹化。目标MessageListenerContainer
从侦听器的id
中获取id
是什么魔力呢因此,在您的例子中
<int-jms:inbound-gateway>
的container
应该应用值myQueueListener