使用Spring的JMS命名空间时,侦听器容器的id是多少?

FGr*_*reg 1 java spring spring-integration spring-jms

根据JMS命名空间标记的Spring文档(即<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>
Run Code Online (Sandbox Code Playgroud)

我想定义一个使用上述容器的入站网关.我将使用什么作为container入站网关定义的属性?

例:

<int-jms:inbound-gateway 
    request-channel="inboundChannel"
    id="messageChannelAdapter"
    container="**What Goes Here?**"
    reply-channel="outboundChannel" />
Run Code Online (Sandbox Code Playgroud)

或者我误解了监听器容器和网关之间的关系?

M. *_*num 5

listener-container元素不用于配置独立的JMS侦听器容器.它旨在作为所有封闭listener标签的蓝图.在运行时,实际发生的是为每个封闭构造的JMS侦听器容器listener.所以没有一个容器而是多个容器.

正如@artembilan所提到的,容器的id被设置为监听器的id.但是,当您重复使用侦听器进行spring集成时,它会使侦听器无效.侦听器容器只能连接一个MessageListener,而不能连接多个.

如果要为Spring Integration网关使用侦听器容器,则必须使用其中一个*MessageListenerContainer类自己构造一个.