根据JMS命名空间标记的Spring Documentation(即<jms:listener-container>
),id
元素没有<jms:listener-container>
属性。
如果没有id
的话,如何从其他bean定义中引用侦听器容器bean?
例如,假设我定义了以下Listener容器:
<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" />
或者我误解了侦听器容器和网关之间的关系?
答案 0 :(得分:5)
listener-container
元素不用于配置独立的JMS侦听器容器。它旨在充当所有封闭的listener
标记的蓝图。在运行时,实际发生的是为每个封闭的listener
构造JMS侦听器容器。所以没有一个容器而是多个容器。
正如@artembilan所提到的,容器的id被设置为监听器的id。但是,当您重复使用侦听器进行spring集成时,它会使侦听器无用。侦听器容器只能连接一个MessageListener,而不能连接多个。
如果要为Spring Integration网关使用侦听器容器,则必须使用其中一个*MessageListenerContainer
类自行构建一个。
答案 1 :(得分:3)
正如Marten所说,listener-container
为每个MessageListenerContainer
子元素假设listener
个bean。目标MessageListenerContainer
从侦听器的id
获取id
是多么神奇。
因此,在您的情况下,<int-jms:inbound-gateway>
的{{1}}应该应用值 myQueueListener 。