1

Camel 流暢なビルダーを使用して、一連の複雑なルートを設定しています。そこでは、RecipientList機能を使用した動的ルーティングを使用しています。

場合によっては、受信者リストに存在しないメッセージング エンドポイントが含まれるという問題が発生しました (たとえば、 のようなものseda:notThere)。

簡単な例は次のようなものです。

from("seda:SomeSource")....to("seda:notThere");

エクスチェンジがまだ存在しないエンドポイントにルーティングしようとした場合にエラーがスローされるように、ルートを構成するにはどうすればよいですか?

私は Camel 2.9.x を使用しており、デッド レター チャネルとさまざまなエラー ハンドラの実装を既に試しましたが、(一見) エラーや警告はログに記録されませんでした。

私が見る唯一のログは、Camelが存在しないエンドポイントに送信(しようとしている)していることを示しています:

2013-07-03 16:07:08,030|main|DEBUG|o.a.c.p.SendProcessor|>>>> Endpoint[seda://notThere] Exchange[Message: x.y.Z@293b9fae]

前もって感謝します!

4

1 に答える 1

2

この場合、すべてのエンドポイントは異なる動作をします。

存在しない ftp サーバーに書き込もうとすると、必ずエラーが発生します (接続が拒否されたか、またはその他の方法で)。

これは、多くのエンドポイントにも当てはまります。

SEDA キューが存在しない場合は作成され、メッセージはそこに残されます。したがって、ルートは実際に「notThere」に送信され、アプリケーションが再起動するか、誰かが seda:notThere からのメッセージを消費し始めるまで、メッセージはそこに残ります。これは、seda キューの設計方法です。to("seda:notThere?size=100") で seda キューのサイズを設定すると、誰も読んでいない (またはゆっくりと読んでいる) 場合、メッセージ 101 以降で例外が発生します。

何らかのルートがメッセージを消費していることを確認する必要がある場合は、「seda」の代わりに「direct」を使用してください。ステージングに関して seda の機能を使用するための中間層と、アクティブな消費者が存在することを直接知る機能を使用することもできます (おそらくユーザー入力で受信者リストから送信された場合 (神は禁じられています))。

from("whatever").recipentList( ... ); // "direct:ep1" work, "direct:ep2" throws exception

from("direct:ep1").to("seda:ep1");
from("seda:ep1").doRealStagedStuffHere();
于 2013-07-04T10:47:02.033 に答える