Как правильно настроить ActiveMQ с помощью пула?

Мы используем следующую конфигурацию для AMQ

<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
    <property name="brokerURL" value="${brokerURL1}"/>
</bean>
<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
    <property name="maxConnections" value="10"/>
    <property name="maximumActive" value="100"/>
    <property name="connectionFactory" ref="jmsConnectionFactory"/>
</bean>
<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
    <property name="connectionFactory" ref="pooledConnectionFactory"/>
    <property name="transacted" value="false"/>
    <property name="concurrentConsumers" value="5"/>
    <property name="maxConcurrentConsumers" value="10"/>
</bean>

<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="configuration" ref="jmsConfig"/>
</bean>

Периодически у меня странная проблема - свободное сообщение. На самом деле AMQ говорит, что все нормально, а сообщение отменено, но нет приложения в приложении...

Я читал, что это может быть проблема с кешированием потребителей, а вместо этого JmsConfiguration следует использовать после config

<bean id="jmsConfig" class="org.apache.activemq.camel.component.ActiveMQConfiguration">
    <property name="connectionFactory" ref="pooledConnectionFactory"/>
    <property name="transacted" value="false"/>
    <property name="concurrentConsumers" value="5"/>
    <property name="maxConcurrentConsumers" value="10"/>
    <property name="cacheLevelName" value="CACHE_CONSUMER"/>
</bean>

Кто-нибудь знает, как правильно настроить activemq? какие значения должны быть установлены для обеспечения наилучшей производительности и хорошей надежности?

<property name="maxConnections" value="?"/>
<property name="maximumActive" value="?"/>
<property name="concurrentConsumers" value="?"/>
<property name="maxConcurrentConsumers" value="?"/>

Должен ли я использовать org.apache.activemq.pool.PooledConnectionFactory или есть лучший подход?

Ответ 1

Похоже, вы больше спрашиваете, как настроить Apache Camel как использовать ActiveMQ.

Существует множество способов настроить объединение и т.д. в зависимости от того, какие шаблоны использования/загрузки вы видите в своей настройке и каковы ваши требования. Эти настройки, которые вы ссылаетесь на maxConcurrentConsumers и т.д., Будут зависеть от ваших маршрутов верблюдов и от количества пользователей, которые вы там настроили, например.

Просто, есть два сценария для оптимизации: Отправка и получение сообщений (запрос/ответ приходит в голову, но это другая история).

Если вы получаете много сообщений в своем приложении, то вы обычно настраиваете прослушиватели сообщений и объединение в них не очень полезно, так как вы не создаете/не сносите много соединений/сеансов. Просто убедитесь, что вы настроили достаточно одновременных потребителей - сколько зависит от вашего оборудования (# ядра процессора и т.д.) И размера каждого сообщения. Вы должны измерить свою конкретную настройку для лучшей производительности.

Когда вы отправляете сообщения, Camel предлагает PooledConnectionFactory ActiveMQ, как вы говорите. Связанная с документацией также предлагает некоторые значения по умолчанию для параметров, которые вы запрашиваете.

  <property name="maxConnections" value="8" />
  <property name="maximumActive" value="500" />
   <property name="transacted" value="false"/>

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

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