Solace JMS не работал с параллельными потоками в Camel

Чтобы выполнить параллельную обработку сообщений jms, я настроил JmsComponent и connectionFactory, как показано ниже.

После прочтения некоторых постов и официального урока, кажется, что приведенная ниже конфигурация должна работать для ActiveMQ. Тем не менее, мое тестирование показывает, что это не работает на Solace. Может ли кто-нибудь дать мне подсказку на это? Благодарю.

// Определение маршрута - DSL Camel Java из (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>

2 ответа

Я считаю, что проблема заключается в том, что ваш потребитель связан с исключительной очередью, и только одному потребителю разрешено обрабатывать сообщения. Привязка к неисключительной очереди должна решить проблему.

Исключительные очереди позволяют только первому потребителю использовать из очереди. Все остальные потребители, связанные с очередью, не получат данные. В случае отключения первого потребителя следующий самый старый потребитель начнет получать данные. Другие потребители могут рассматриваться как "резервные" потребители, которые примут момент, когда первый потребитель отключится.

Неэксклюзивные очереди используются для балансировки нагрузки. Сообщения, которые помещаются в очередь, будут распространяться среди всех потребителей в циклическом порядке.

Проверьте:

  • Есть ли в журнале сообщения об исключениях?
  • Это jndiName правильный? Возможно, так и должно быть jms/ceConnectionFactory?
  • URI INBOUND_ENDPOINT правильный?
  • ...

Попробуйте сначала установить ActiveMQ и перенести конфигурацию в Solace.

Другие вопросы по тегам