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的第一和配置迁移到慰藉。

+1

我碰巧发现那不是骆驼问题。根本原因是Solace JMS API比它的本地对手慢得多,这会使线程空闲。为了验证我已经试图进行睡眠并记录了一些消息ThroughputMeasurer.class,结果显示所有日志打印在睡眠之下。 – 2014-10-31 16:00:34

我相信这里的问题是,你的消费者被绑定到一个排他队列,并且只有一个消费者被允许处理消息。绑定到非排他队列应该可以解决问题。

专用队列只允许第一个使用者从队列中消耗。 绑定到队列的所有其他使用者都不会收到数据。如果第一位消费者断开连接,下一位年龄最大的消费者将开始接收数据。其他消费者可以被认为是“待命”的消费者,它将接管第一位消费者断开的时刻。

非独占队列用于负载平衡。假脱机到队列的消息将以循环方式分发给所有使用者。