gpt4 book ai didi

java - ActiveMQ:队列(具有并发消费者)和主题的正确配置

转载 作者:行者123 更新时间:2023-12-04 05:52:44 27 4
gpt4 key购买 nike

我们有一个 ActiveMQ/Camel 配置,以前一直使用专门的消息队列,并发消费者。

然而,我们现在正在引入消息主题,并发现 - 由于并发消费者 - 在主题中收到的消息被多次使用。

这个场景的正确配置是什么?

即,我们希望在队列上接收到的消息有多个并发消费者,但只为在主题上接收到的消息定义一个消费者。

这是当前的配置:

<amq:connectionFactory id="amqConnectionFactory"
useAsyncSend="true" brokerURL="${${ptl.Servername}.jms.cluster.uri}"
userName="${jms.username}" password="${jms.password}" sendTimeout="1000"
optimizeAcknowledge="true" disableTimeStampsByDefault="true">
</amq:connectionFactory>

<bean id="cachingConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
<property name="cacheConsumers" value="true"></property>
<property name="cacheProducers" value="true"></property>
<property name="reconnectOnException" value="true"></property>
<property name="sessionCacheSize" value="${jms.sessioncachesize}"></property>
</bean>

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
<property name="connectionFactory" ref="cachingConnectionFactory" />
<property name="transacted" value="false" />
<property name="concurrentConsumers" value="${jms.concurrentConsumer}" />
<property name="maxConcurrentConsumers" value="${jms.max.concurrentConsumer}" />
<property name="preserveMessageQos" value="true" />
<property name="timeToLive" value="${jms.timeToLive}" />
</bean>

<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="configuration" ref="jmsConfig" />
</bean>

最佳答案

您可以为任何主题消费者显式设置 concurrentConsumers/maxConcurrentConsumers 为“1”。

from("activemq:topic:myTopic?concurrentConsumers=1&maxConcurrentConsumers=1")...  

或者,将 JmsConfiguration concurrent/maxConcurrentConsumers 属性设置为“1”,然后根据需要显式启用队列的并发消费。
from("activemq:queue:myQueue?maxConcurrentConsumers=5")...  

另外,您可以使用 Virtual Topics执行 Topic 消息的并发消费而不会出现重复(强烈推荐使用传统 Topic)

关于java - ActiveMQ:队列(具有并发消费者)和主题的正确配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9881629/

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