Ненормальное поведение Apache ActiveMQ на нескольких потребителях
Я использую Jboss-fuse-6.3, с внешним Apache-activemq-5.15.2. Я связал 50 потребителей в очереди, и на портале Active MQ на странице "Активные потребители" я заметил, что все 50 потребителей связаны, но распределение сообщений в очередях не одинаково.
Снимок экрана прилагается. В сеансе с идентификатором "1" количество сообщений в очереди составляет около 1010, а в других пользовательских сеансах сообщений в очереди - только 10.
Я в очереди сообщений от Apache Camel Route. Ниже мой Blueprint XML (я делаю что-то не так)
<bean class="org.apache.activemq.spring.ActiveMQConnectionFactory" id="connectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
<property name="trustAllPackages" value="true"/>
</bean>
<bean class="org.apache.camel.component.jms.JmsConfiguration" id="jmsConfig">
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
<bean class="org.apache.activemq.camel.component.ActiveMQComponent" id="activemq">
<property name="configuration" ref="jmsConfig"/>
</bean>
<bean class="org.apache.activemq.spring.ActiveMQConnectionFactory" id="connectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"/>
<property name="userName" value="admin"/>
<property name="password" value="admin"/>
<property name="trustAllPackages" value="true"/>
</bean>
<bean class="org.apache.camel.component.jms.JmsConfiguration" id="jmsConfig">
<property name="connectionFactory" ref="connectionFactory"/>
</bean>
<bean class="org.apache.activemq.camel.component.ActiveMQComponent" id="activemq">
<property name="configuration" ref="jmsConfig"/>
</bean>
<!-- ENQUEUEING MESSAGES -->
<to pattern="InOnly" uri="activemq:queue:MyQueue"/>
<!-- DEQUEUEING MESSAGES -->
<fromuri="activemq:queue:MyQueue?concurrentConsumers=50"/>
1 ответ
Похоже, что это нормальное поведение предварительной выборки со стороны клиента JMS. Если вы хотите, чтобы конкурирующие потребители получали справедливую диспетчеризацию, вам нужно понизить уровень предварительной выборки, поскольку первый подключающийся потребитель будет часто получать большее количество сообщений, отправляемых ему, поскольку предварительная выборка по умолчанию равна 1000 для потребителя очереди.
Подробнее о предварительной загрузке ActiveMQ читайте здесь.