Как правильно настроить 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"/>
Для максимальной надежности вы должны использовать транзакционные сеансы и передать полученное сообщение после того, как вы его безопасно обработали.
Странно, что вы говорите, что теряете сообщения, в ваших настройках нет ничего конкретного, что заставило бы вас потерять сообщения. Вам нужно отследить это немного дальше или дать некоторую информацию о реализации приложения.