2012-07-18 41 views
10

Utilizamos siguiente configuración para AMQ¿Cómo configurar apropiadamente ActiveMQ con la agrupación?

<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> 

Periódicamente tengo extraña tema - mensaje suelta. En realidad AMQ dice todo bien y se quita de la cola de mensajes, pero no hay ningún mensaje de aplicación ...

He leído que puede ser problema con los consumidores de almacenamiento en caché y en su lugar se debe utilizar JmsConfiguration config siguientes

<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> 

¿El ¿Alguien sabe cómo configurar correctamente activemq? qué valores se deben establecer para obtener el mejor rendimiento y una buena fiabilidad?

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

Debo utilizar org.apache.activemq.pool.PooledConnectionFactory o hay un mejor enfoque?

Respuesta

5

Parece que está más preguntando cómo configurar Apache Camel para usar ActiveMQ.

Hay muchas maneras de configurar la agrupación, etc. en gran medida, dependiendo de los patrones de uso/carga que vea en la configuración y cuáles son sus requisitos. Aquellas configuraciones a las que se refiere a maxConcurrentConsumers, etc. dependerán de las rutas de Camel y del número de consumidores que instale allí, por ejemplo.

Simplemente, hay dos escenarios para optimizar: Enviar y recibir mensajes (también me viene a la mente la solicitud/respuesta, pero esa es una historia diferente).

Si recibes muchos mensajes en tu aplicación, normalmente configuras escuchas de mensajes y la agrupación no es de mucha ayuda, ya que no creas/derribas muchas conexiones/sesiones. Simplemente asegúrese de configurar suficientes consumidores simultáneos: cuántos dependen de su hardware (n. Núcleos de CPU, etc.) y el tamaño de cada mensaje. Tienes que medir tu configuración específica para obtener el mejor rendimiento.

Cuando envía mensajes, Camel suggests the PooledConnectionFactory de ActiveMQ como usted dice. La documentación vinculada también sugiere algunos valores predeterminados para la configuración que está solicitando.

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

Para una fiabilidad máxima, se debe utilizar sesiones tratados y de las cometer el mensaje recibido que una vez que haya procesado con seguridad.

Extraño que diga que pierde mensajes, no hay nada específico en su configuración que le haga perder mensajes. Necesitas rastrear esto un poco más o dar algo de información sobre la implementación de la aplicación.

Cuestiones relacionadas