Solace JMS没有在Camel中使用并行线程运行
问题描述:
为了执行jms消息的并行处理,我已经配置了JmsComponent和connectionFactory,如下所示。Solace JMS没有在Camel中使用并行线程运行
阅读了一些文章和官方教程后,似乎下面的配置应该适用于ActiveMQ。 但是,我的测试表明它不适用于Solace。有人能给我一个提示吗?谢谢。
//路由定义 - 骆驼爪哇DSL 从(INBOUND_ENDPOINT).setExchangePattern(ExchangePattern.InOnly).threads(5).bean(ThroughputMeasurer.class);
<!-- JMS Config -->
<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory" ref="cachedConnectionFactory" />
<property name="acknowledgementModeName" value="AUTO_ACKNOWLEDGE" />
<property name="deliveryPersistent" value="false" />
<property name="asyncConsumer" value="true" />
<property name="concurrentConsumers" value="5" />
</bean>
<!-- jndiTemplate is omitted here -->
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="jndiName" value="ceConnectionFactory" />
</bean>
<bean id="cachedConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="connectionFactory" />
<property name="sessionCacheSize" value="30" />
</bean>
答
检查:
- 有没有在日志中的任何异常消息?
-
jndiName
是否正确?也许它应该是jms/ceConnectionFactory
? - URI是
INBOUND_ENDPOINT
是否正确? - ...
尝试安装ActiveMQ的第一和配置迁移到慰藉。
答
我相信这里的问题是,你的消费者被绑定到一个排他队列,并且只有一个消费者被允许处理消息。绑定到非排他队列应该可以解决问题。
专用队列只允许第一个使用者从队列中消耗。 绑定到队列的所有其他使用者都不会收到数据。如果第一位消费者断开连接,下一位年龄最大的消费者将开始接收数据。其他消费者可以被认为是“待命”的消费者,它将接管第一位消费者断开的时刻。
非独占队列用于负载平衡。假脱机到队列的消息将以循环方式分发给所有使用者。
我碰巧发现那不是骆驼问题。根本原因是Solace JMS API比它的本地对手慢得多,这会使线程空闲。为了验证我已经试图进行睡眠并记录了一些消息ThroughputMeasurer.class,结果显示所有日志打印在睡眠之下。 – 2014-10-31 16:00:34