2012-04-02 15 views
3

私はApache Camelでの処理を最善の方法で行うことに興味があります。Apache Camelでのストレートスルー処理

私は、同じJVMで起動できるいくつかのコンポーネントがあります。これは、私のactivemqブローカとは別のものです。私のメッセージがあるコンポーネントから次のコンポーネントに順番に渡されるように設定しようとすると意味がありますか?次のメッセージが始まる前に各メッセージがルートに沿ってすべてのコンポーネントに当たるように、どうやってラクダを設定するのですか?

具体的には、私はbrokerURIの設定などでこれを行いたいと思います。私はこのページ:http://fusesource.com/wiki/display/ProdInfo/Understanding+the+Threads+Allocated+in+ActiveMQを見ましたが、オプションの実装場所と方法はわかりません - optimizedDispatchはブローカのdestinationPolicyオプションで動作するようです。

おかげ

答えて

5

ルート/消費者あたり

、グローバルにすべての接続のために

<bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> 
    <property name="connectionFactory" ref="pooledConnectionFactory"/> 
    <property name="concurrentConsumers" value="1"/> 
    <property name="maxConcurrentConsumers" value="1"/> 
</bean> 

または明示的に...明示的にキューから消費あなたのルートで単一のコンシューマを設定、起動する

次に、いくつかのオプションがあります。一般に、パイプラインパターンを使用して、ステップ間で(同期して)単一のルートでメッセージを渡します。または、camel-directを使用して、複数のルート間で同期メッセージフローを提供します。その後、

from("activemq:queue:input?concurrentConsumers=1&maxConcurrentConcumers=1") 
    .to(<step1>) 
    .to(<step2>) 
    ... 

やあなたのステップは複数のルートが必要な場合は、直接...

from("activemq:queue:input?concurrentConsumers=1&maxConcurrentConsumers=1") 
    .to("direct:step1"); 

from("direct:step1") 
    //perform step1 processing 
    .to(direct:step2"); 

from("direct:step2") 
    //perform step2 processing 
    .to(direct:step3"); 
... 
+0

を使用してそれらを接続するので、それは消費者が毎回から読んでいることをキューに追加する必要がありますか?ブローカコントロール内のすべてのキューに対してこれを設定する方法はありませんか? – Derek

+0

これもグローバルに行うことができます...私はそれに応じて答えを更新しました –

+0

ブローカでこれらのasyncとdispatchAsyncオプションを設定するのはどうですか?それはストレートスルー処理に必要なもので、TCP転送でそれを使用できますか? – Derek

関連する問題