her*_*fiq 0 java jboss activemq-classic apache-camel
我正在使用 Jboss-fuse-6.3 和外部 Apache-activemq-5.15.2。我在一个队列上绑定了 50 个消费者,在 Active MQ 门户的“活动消费者”页面上,我注意到所有 50 个消费者都已绑定,但队列上的消息分布并不相同。
附上屏幕截图。在会话 ID“1”上,排队消息计数约为 1010 条,但在其他消费者会话上,排队消息仅为 10 条。
我正在对来自 Apache Camel Route 的消息进行排队。下面是我的蓝图 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"/>
Run Code Online (Sandbox Code Playgroud)
这似乎是 JMS 客户端的正常预取行为。如果您希望竞争消费者公平分派,那么您需要降低预取级别,因为第一个连接的消费者通常会收到更多数量的消息分派给它,因为队列消费者的默认预取为 1000。
客户端 URI 可以控制预取值:
tcp://localhost:61616?jms.prefetchPolicy.queuePrefetch=1
Run Code Online (Sandbox Code Playgroud)
在此处阅读有关 ActiveMQ 消费者预取的更多信息。