Camel の SEDA コンポーネントについて、ルーティング時にルーターが Exchange オブジェクトをキューから削除するかどうかを知っている人はいますか? ルーターは正常に動作していますが、Exchange オブジェクトがキューに保持されているのではないかと心配しているため、キューは継続的に大きくなります...
これは私のルーターです:
public class MyRouter extends RouteBuilder {
@Override
public void configure() {
from("seda:input")
.choice()
.when(someValue)
.to("bean:someBean?method=whatever")
.when(anotherValue)
.to("bean:anotherBean?method=whatever");
}
}
そうでない場合、ルーティングまたは処理された Exchange オブジェクトをキューから削除する方法を知っている人はいますか (アプリケーション内のいくつかの Bean にメッセージをルーティングしていますが、それらは正しく機能しています。唯一の問題はキューにあります)。
もう 1 つの質問は、入力 Exchange が選択条件のいずれにも一致しない場合はどうなるかということです。それもキューに入れられますか?
よろしくお願いします。
編集済み:クラウスの回答を読んだ後、ルーターに end() メソッドを追加しました。しかし、少なくともセダとルーターを一緒にテストするときは、私の問題は解決しません。いくつかのメッセージをキューに入れ、(メッセージを受信している) エンドポイントをモックしましたが、テストを実行するたびにキューがいっぱいになります。多分私は何かが欠けています。これは私のテストです:
@Test
public void test() throws Exception {
setAdviceConditions(); //This method sets the advices for mocking the endpoints
Message message = createMessage("text", "text", "text"); //Body for the Exchange
for (int i = 0; i < 10; i++) {
template.sendBody("seda:aaa?size=10", message);
}
template.sendBody("seda:aaa?size=10", message); //java.lang.IllegalStateException: Queue full
}
ありがとう!!
再編集:ルーターを確認した後、問題に気付きました。ルーターが読み取っていたエンドポイント(facepalm)とは異なるエンドポイントに書き込んでいました。
クラウスさん、ご回答ありがとうございます。