2012-07-18 4 views
10

は、我々は定期的に、私は奇妙な問題を持っている プールでActiveMQを正しく設定するにはどうしたらいいですか?緩いメッセージ -

<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

ために以下の構成を使用しています。実はAMQは、私はそれは、キャッシング、消費者の問題にすることができ、その代わりJmsConfigurationが設定

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

ん、以下を使用する必要があります読んだことすべてがOKと言うメッセージがデキューされますが、アプリには何のメッセージはありません...

誰もどのように適切にactivemqを設定するために知っている? 最高のパフォーマンスと信頼性のためにどの値を設定する必要がありますか?

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

org.apache.activemq.pool.PooledConnectionFactoryを使用するか、より良い方法がありますか?

答えて

5

Apache CamelのActiveMQの使い方をもっと尋ねているようです。

プーリングなどの設定には、セットアップで表示される使用法/負荷パターンや要件に応じてさまざまな方法があります。 maxConcurrentConsumersなどに参照している設定は、あなたのCamelルートと、そこに設定する消費者の数に応じて異なります。

単純に、次の2つのシナリオを最適化する必要があります。メッセージの送受信(要求/応答も同様ですが、それは別の話です)。

多くのメッセージをアプリケーションで受け取った場合は、通常はメッセージリスナーを設定し、多くの接続/セッションを作成/解体しないため、プーリングはあまり役に立ちません。あなたのハードウェア(#CPUコアなど)と各メッセージのサイズに依存する十分な同時消費者を設定するだけで十分です。最高のパフォーマンスを得るには、特定の設定を測定する必要があります。

あなたが言うように、メッセージを送信すると、Camel suggests the PooledConnectionFactoryがActiveMQになります。リンク先のドキュメントには、求めている設定のデフォルト値もいくつか示唆されています。最大信頼性を確保するため

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

あなたはそれが安全に処理されていたら、あなたは、トランザクションセッションを使用して、受信したメッセージをコミットする必要があります。

あなたがメッセージを失うという奇妙なことは、メッセージを失うような設定に固有のものはありません。これをもう少し追跡したり、アプリの実装に関する情報を提供したりする必要があります。

関連する問題