10

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 はすべて OK で、メッセージはデキューされますが、アプリにはメッセージがありません...

コンシューマーのキャッシュに問題がある可能性があることを読みましたが、代わりに構成に従って 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>

activemq を適切に構成する方法を知っている人はいますか? 最高のパフォーマンスと良好な信頼性を得るには、どの値を設定する必要がありますか?

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

使用する必要がありますorg.apache.activemq.pool.PooledConnectionFactoryか、それともより良いアプローチがありますか?

4

1 に答える 1

7

ActiveMQ を使用する方法として Apache Camel を構成する方法について質問しているようです。

プーリングなどを構成する方法はたくさんあります。セットアップで見られる使用法/負荷パターンと要件に応じて大きく異なります。maxConcurrentConsumers などを参照している設定は、Camel ルートと、たとえばそこに設定したコンシューマーの数によって異なります。

簡単に言うと、最適化するシナリオが 2 つあります。それは、メッセージの送信と受信です (要求/応答も思い浮かびますが、それは別の話です)。

アプリで大量のメッセージを受信する場合、通常はメッセージ リスナーをセットアップしますが、多くの接続/セッションを作成/破棄しないため、プーリングはあまり役に立ちません。十分な数のコンカレント コンシューマーを構成していることを確認してください。その数は、ハードウェア (CPU コア数など) と各メッセージのサイズによって異なります。最高のパフォーマンスを得るには、特定のセットアップを測定する必要があります。

メッセージを送信すると、Camelはあなたの言うように ActiveMQの PooledConnectionFactory を提案します。リンク先のドキュメントでは、求めている設定のデフォルト値もいくつか提案されています。

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

信頼性を最大限に高めるには、トランザクション セッションを使用し、受信したメッセージを安全に処理したらコミットする必要があります。

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

于 2012-07-18T20:11:37.650 に答える