2017-03-10 6 views
0

私のCamelアプリケーションには、同じ処理ルートによって処理される2つのCXFエンドポイントがあり、AFAIK各エンドポイントは、着信HTTP要求に応じてExchangesを並行して生成することがあります。
両方のエンドポイントがdirect:コンポーネントを使用して同じルートを使用して要求を転送します。のCamel相当と記述されることがあります。メソッドはです。Apache Camel:直接エンドポイントでルートを並行して実行できますか?

ダイレクト:成分は、プロデューサがメッセージ交換を送信する任意の消費者の直接、同期呼び出しを提供します。

私の質問は:

  • direct:コンポーネントは、並列に異なる要求を実行していますか? (それぞれの要求には独自のExchangeがあり、異なるjava Threadによって実行されます)
  • もしそうでなければ、どのようにCXF要求を並行して処理するのですか?

これが私の状況です:お使いの場合には

<route id="CxfRoute1"> 
    <from uri="cxf:bean:endpoint1" /> 
    <to uri="direct:handle" /> 
</route> 

<route id="CxfRoute2"> 
    <from uri="cxf:bean:endpoint2" /> 
    <to uri="direct:handle" /> 
</route> 

<route id="HandleStuffRoute" /> 
    <from uri="direct:handle" /> 
    <to uri="bean:stuffHandler" /> 
</route> 
+0

どのように2つのリクエストを正確に同じ時刻にあなたのルートに到着させることができますか?何らかのキューがあります。たとえTCPレベルであっても、私は思うでしょう。一度に1つのCXFエンドポイントを常に実行するように思えます。 –

+0

これらは、TCPレベルで連続していても、実行/スレッドレベルで並列であってもよい。 1つのリクエストが処理を終了するまでブロックしたくありません。 –

答えて

0

これは直接メソッド呼び出しのように機能します。たとえば、Foo foo = ...; foo.callSomeMethod()現在のスレッドを使用して呼び出します。したがって、この例のCXFではコンシューマと並行しているので、2人以上のクライアントが同時にCXFを呼び出すと、それぞれの呼び出しはそれぞれのスレッドで実行され、それぞれがダイレクトメソッド呼び出しとして呼び出され、すべてが並行して実行できます。

1

はい、それは並列に異なる要求を実行する必要があります。

おそらくこれをテストするCamel単体テストを作成することができます。

.parallelProcessing().to("cxf1", "cxf2", "cxf3") 

して、結果を観察:あなたのルートテストクラスでは、タイマーがベースとし、いくつかのダミー本体を作成し、このようなあなたのルートのエンドポイントを呼び出すされた新しいルートを作成することができます。

私は、JMeterを使用してcxfエンドポイントに対してテストを作成し、観察することをお勧めします。

+0

ありがとうございました!私はソースコードを調べることを考えていましたが、十分な時間がありません:-( –

0

ダイレクトと同じ方法で並列リクエストを処理する場合は、代わりに "seda"を使用できます。詳細はhttp://camel.apache.org/seda

+0

プロセスを続行する前にルートから返されたボディが必要なので、sedaキューは機能しません。 –

関連する問題