0

ファイルを見て、バッチ ルーチンのように、このファイルの潜在的に数百のレコードを処理する camel ルートがあります (ただし、camel には 1 つのメッセージしかありません)。したがって、メッセージが完了するまでに数分または場合によっては数時間かかる可能性があります。このメッセージ (および待機中の他のメッセージ) が完了したら、キューをシャットダウンします。

考慮すべき点は次のとおりです。

シャットダウン戦略は、強制シャットダウンの前にルートが停止するまで待機する時間を定義します

<bean id="shutdown" class="org.apache.camel.impl.DefaultShutdownStrategy"> 
 <property name="timeout" value="#[bpf.defaultShutdownStrategy.timeout]"/>
</bean>

ルートには、すべてのメッセージが処理されるまで待機するパラメータ shutdownRunningTask="CompleteAllTask​​s" があります。

タイムアウトを超えると正常ではないため、どちらが優先されるかわかりません。強制的にシャットダウンされます。このシナリオでは、処理にかかる時間を予測できないため、タイムアウトを超える可能性があります。

アイデア/考慮事項はありますか?前もって感謝します。

4

1 に答える 1

1

onCompletion機能を確認する必要があります。Exchange が完了すると、別のスレッドに新しいルートが追加されます。

以下は、Camel のドキュメントの例です。

Java DSL

// define a global on completion that is invoked when the exchange is complete
onCompletion().to("log:global").to("mock:sync");

from("direct:start")
    .process(new MyProcessor())
    .to("mock:result");

XML DSL

<!-- this is a global onCompletion route that is invoke when any exchange is complete
     as a kind of after callback -->
<onCompletion>
    <to uri="log:global"/>
    <to uri="mock:sync"/>
</onCompletion>

<route>
    <from uri="direct:start"/>
    <process ref="myProcessor"/>
    <to uri="mock:result"/>
</route>

次に、Camelでルートを停止する方法に関するドキュメントを次に示します。

于 2013-11-05T21:30:44.397 に答える