2012-01-16 3 views
2

activemqでプライオリティをアクティブにしようとした後、私はラクダ(here参照)を試してみるように言われました。しかし、私はそれを働かせることはできません、そして、私はそれがどのように動作すべきかも分かりません。camelを使用したactivemqによるプライオリティの有効化

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> 
    <route> 
    <from uri="jms:queue:myqueue" /> 
    <resequence> 
     <batch-config batchSize="200" batchTimeout="3000" allowDuplicates="true" reverse="true"/> 
     <header>JMSPriority</header> 
    <to uri="mock:result"/> 
    </resequence> 
    </route> 
</camelContext> 

<bean id="jmsConfig" class="org.apache.camel.component.activemq.ActiveMQConfiguration"> 
    <property name="connectionFactory" ref="pooledConnectionFactory"/> 
    <property name="transacted" value="false"/> 
    <property name="concurrentConsumers" value="10"/> 
</bean> 

<bean id="activemq" class="org.apache.camel.component.activemq.ActiveMQComponent"> 
    <property name="configuration" ref="jmsConfig"/> 
</bean> 

しかし、この構成は(何も注文していない)動作しません、と私はいくつかの質問があります:

私は私の春の構成では、次のコードを追加しました

  • mock:resultの意味は?私はドキュメンテーションでそれを見つけることができませんでした。
  • キューを再注文する方法、メッセージを作成した後に行う方法、メッセージを追加する方法について説明します。
  • spring activemqの基本設定とは独立していますか? (ここでは、キャメルActiveMQComponentを使用しています)
+0

なぜあなたはラクダを使用していますとにかく? –

答えて

1

最初に、mockエンドポイントは単体テスト用です。あなたは、予想されるメッセージが受信されたことを検証するためにそれを使用することができます:

MockEndpoint resultEndpoint = context.resolveEndpoint("mock:result", MockEndpoint.class); 
resultEndpoint.expectedMessageCount(3); 
resultEndpoint.expectedBodiesReceived("firstMessageBody", "secondMessageBody", "thirdMessageBody"); 
resultEndpoint.message(0).header("foo").isEqualTo("bar"); 

次に、resequencerは、いくつかの属性(あなたのケースでは、ヘッダー「JMSPriority」)に基づいてメッセージを注文するように設計されており、すべてのメッセージの上にこれを実行します指定されたタイムアウト期間またはバッチサイズ(デフォルトでは、バッチサイズは100、タイムアウトは1000ミリ秒)に渡って流れます。

かいつまんで、あなたは彼らがキューに送信される前にキュー間またはキューと消費者の間では、(バッチで)メッセージを注文するresequencerを使用することができます...

+0

したがって、私が正しく理解していれば、キューは並べ替えられ、同時に結果は模擬エンドポイントに送られますか? Ho、タイムアウトとバッチサイズのオプションは、メッセージが少し発注されているように見えても、影響はないようです。 – nicompte

+0

Camelは、キューを直接並べ替えることはできません。キューをルート/エンドポイント経由で送信するメッセージに対してのみ機能します。つまり、コンシューマとキュー[from(queue).resequencer(...)。(consumer)]の間にキューを置くと、AMQのJMSPriorityと同じようにメッセージが並べ替えられます。 ..ちょうどあなたより多くの制御と柔軟性を提供するメッセージの順序 –

+0

ここではあなたと一緒に遊ぶことができる実例です..https://svn.apache.org/repos/asf/camel/trunk/camel-core/src/テスト/ java/org/apache/camel/processor/ResequenceStreamIgnoreInvalidExchangesTest.java –