0

为了执行 jms 消息的并行处理,我配置了 JmsComponent 和 connectionFactory 如下。

在阅读了一些帖子和官方教程之后,似乎下面的配置应该适用于 ActiveMQ。但是,我的测试表明它不适用于Solace。有人可以给我一个提示吗?谢谢。

// 路由定义 - Camel Java DSL from(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>
4

2 回答 2

1

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

独占队列只允许第一个消费者从队列中消费。绑定到队列的所有其他消费者将不会收到数据。如果第一个消费者断开连接,下一个最老的消费者将开始接收数据。其他消费者可以被认为是“备用”消费者,他们将在第一个消费者断开连接的那一刻接管。

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

于 2015-09-21T06:39:05.693 回答
0

查看:

  • 日志中是否有任何异常消息?
  • jndiName正确的吗?也许应该是jms/ceConnectionFactory
  • URIINBOUND_ENDPOINT是否正确?
  • ...

尝试先设置 ActiveMQ,然后将配置迁移到 Solace。

于 2014-10-30T21:06:06.093 回答