有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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" />

还是我误解了侦听器容器和网关之间的关系


共 (2) 个答案

  1. # 1 楼答案

    listener-container元素不是用来配置独立的JMS侦听器容器的。它将作为所有封闭的listener标记的蓝图。在运行时,实际发生的是为每个封闭的listener构造一个JMS侦听器容器。因此,不是单个容器而是多个容器

    正如@artembilan提到的,容器的id被设置为侦听器的id。然而,当您将侦听器重新用于spring集成时,它将使侦听器变得无用。侦听器容器只能连接一个MessageListener,不能连接多个MessageListener

    如果您想为Spring集成网关使用侦听器容器,您必须使用*MessageListenerContainer类之一自己构造一个侦听器容器

  2. # 2 楼答案

    正如Marten所说,listener-container对每个listener子元素的MessageListenerContainer豆子进行蛹化。目标MessageListenerContainer从侦听器的id中获取id是什么魔力呢

    因此,在您的例子中<int-jms:inbound-gateway>container应该应用值myQueueListener