gpt4 book ai didi

多个目的地和消费者的 Spring 配置

转载 作者:行者123 更新时间:2023-12-01 15:20:02 25 4
gpt4 key购买 nike

我正在使用一个具有一个目的地和一个消费者(消息监听器)的消息监听器容器:

<bean id="msgListenerContainer"

class="org.springframework.jms.listener.DefaultMessageListenerContainer"

p:connectionFactory-ref="connectionFactory"

p:destination-ref="destination"

p:messageListener-ref="messageHandler"

p:concurrentConsumers="10"

p:maxConcurrentConsumers="50"

p:receiveTimeout="5000"

p:idleTaskExecutionLimit="10"

p:idleConsumerLimit="5" />

如果我想要多个目的地并且每个目的地一个消息监听器,我应该怎么做?如果我想要一个目的地有多个监听器,我应该怎么做?

最佳答案

1) 您需要在 spring 应用程序上下文中将每个消息监听器和生产者定义为 beans。像这样:

    <!-- MESSAGE LISTENER CONTAINER -->
<bean id="ListListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="messageListener" ref="messageListener" />
<property name="connectionFactory" ref="qcf" />
<property name="destinationResolver" ref="JmsDestinationResolver" />
<property name="receiveTimeout" value="${jms-timeout}" />
<property name="destinationName" value="${jms-list-topic}" />
<property name="concurrency" value="1" />
<property name="pubSubDomain" value="true" />
<property name="subscriptionDurable" value="${jms-durable-flag}"/>
<property name="durableSubscriptionName" value="${jms-list-durable-name}" />
<property name="clientId" value="${jms-list-client-id}"/>
<property name="sessionTransacted" value="true"/>
</bean>


<bean id="publisher-1" class="com.stack.overflow.JmsPublisherImpl">
<constructor-arg ref="jmsTemplate" />
</bean>

2) 然后,您可以使用 Autowiring 或在将处理消息的类的应用程序上下文(见下文)中定义来设置相关的生产者。即上面的 Message Listener bean ref 指向的类:

<bean id="messageListener" class="com.stack.overflow.MessageHandler">
<property name="publisher" ref="publisher-1" />
</bean>

这只是 1-2-1 映射。对于任何其他路由,您可以添加多个发布者(如上),然后由您决定如何实现所需的路由逻辑来决定哪个主题/队列应该发布从消费者 1 等接收到的消息等

关于多个目的地和消费者的 Spring 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12814547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com