Wir haben eine ActiveMQ/Camel-Konfiguration, die bisher ausschließlich Nachrichtenwarteschlangen mit gleichzeitigen Consumern verwendet.ActiveMQ: Korrekte Konfiguration mit Queues (mit gleichzeitigen Consumern) und Topics
Wir führen jedoch jetzt Nachrichtenthemen ein und stellen fest, dass - aufgrund der gleichzeitigen Consumer - Nachrichten, die in dem Thema empfangen werden, mehrere Male konsumiert werden.
Wie lautet die richtige Konfiguration für dieses Szenario?
dh wir wollen mehrere gleichzeitige Verbraucher für Nachrichten in einer Warteschlange empfangen, aber nur einen einzigen Verbraucher für Nachrichten zu einem Thema definiert definiert.
Hier ist die aktuelle Konfiguration:
<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>