2012-07-18 9 views
10

Wir verwenden folgende Konfiguration für AMQWie ActiveMQ ordnungsgemäß mit Pooling zu konfigurieren?

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

Von Zeit zu Zeit habe ich merkwürdige Ausgabe - lose Nachricht. Eigentlich sagt AMQ alles in Ordnung und die Nachricht wird aus der Warteschlange entfernt, aber es gibt keine Meldung an app ...

ich gelesen habe kann es Probleme mit Caching Verbrauchern sein und stattdessen JmsConfiguration sollte folgenden 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> 

Does verwendet werden Weiß jemand, wie man activemq richtig konfiguriert? Welche Werte sollten für beste Leistung und gute Zuverlässigkeit eingestellt werden?

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

Sollte ich org.apache.activemq.pool.PooledConnectionFactory oder gibt es bessere Lösung?

Antwort

5

Es scheint, als ob Sie mehr fragen, wie Apache Camel wie ActiveMQ zu konfigurieren konfiguriert wird.

Es gibt viele Möglichkeiten, um Pooling usw. zu konfigurieren, abhängig davon, welche Nutzungs-/Lastmuster Sie in Ihrem Setup sehen und welche Anforderungen Sie haben. Die Einstellungen, die Sie auf maxConcurrentConsumers usw. beziehen, hängen von Ihren Camel-Routen ab und davon, wie viele Kunden Sie zum Beispiel dort einrichten.

Es gibt einfach zwei Szenarien für das Optimieren: Senden und Empfangen von Nachrichten (Anfrage/Antwort kommt mir auch in den Sinn, aber das ist eine andere Geschichte).

Wenn Sie viele Nachrichten in Ihrer App erhalten, dann richten Sie in der Regel Nachrichtenlistener ein, und Pooling ist keine große Hilfe, da Sie nicht viele Verbindungen/Sitzungen erstellen/abreißen. Stellen Sie nur sicher, dass Sie genügend gleichzeitige Benutzer konfigurieren - wie viele davon von Ihrer Hardware abhängen (# CPU-Kerne usw.) und die Größe jeder Nachricht. Sie müssen Ihre spezifische Konfiguration für die beste Leistung messen.

Wenn Sie Nachrichten senden, Camel suggests the PooledConnectionFactory von ActiveMQ wie Sie sagen. Die mit verknüpfte Dokumentation schlägt auch einige Standardwerte für die Einstellungen vor, nach denen Sie fragen.

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

Für Zuverlässigkeit max, sollten Sie getätigten Sitzungen verwenden und die empfangene Nachricht begehen, sobald Sie es verarbeitet sicher haben.

Seltsam, dass Sie sagen, Sie verlieren Nachrichten, es gibt nichts Spezifisches in Ihren Einstellungen, das Sie Nachrichten verlieren lassen würde. Sie müssen dies etwas weiter verfolgen oder Informationen zur App-Implementierung geben.