単一のルートで使用される Bean プロデューサーと Bean コンシューマーがあります。プロデューサーはスレッドを介して生成され、hazelcast キューでデータをリッスンします (ローカルでランダムに生成されたデータであっても、他のものである可能性があります)。
並行性を確保するために、データは seda エンドポイントに送信されます。コンシューマーはデータを取得し、それを別の hazelcast キューに転送します。しかし、それは他の何かかもしれません。
うまく機能しますが、しばらくすると Camel がシャットダウンし、原因がわかりません。
表示されるメッセージの一部を次に示します。
大量のデータを処理しています...
[ main] MainSupport INFO Apache Camel 2.10.3 stopping
[ main] DefaultCamelContext INFO Apache Camel 2.10.3 (CamelContext: camel-1) is shutting down
[ main] DefaultShutdownStrategy INFO Starting to graceful shutdown 1 routes (timeout 300 seconds)
[el-1) thread #2 - ShutdownTask] DefaultShutdownStrategy INFO Waiting as there are still 1 inflight and pending exchanges to complete, timeout in 300 seconds.
その後、300 秒間処理を続けて停止します。
ここにいくつかのコードがあります:
プロデューサー:
public void run()
{
try
{
IRequest service = ProxyHelper.createProxy(context.getEndpoint("seda:echo"), IRequest.class);
BlockingQueue<Request> q = client.getQueue(MainApp.sQueueReceive);
while(true)
{
Request request;
request = q.take();
// no response awaited
service.request(request);
}
}
消費者:
public void onMessage(Request request)
{
nb_forwarded++;
BlockingQueue<Request> q = MainApp.client.getQueue(MainApp.sQueueForward);
try
{
q.put(request);
}
catch (InterruptedException e)
{
exit(2); --> it does not happen
}
そして最後に、ルート:
from("seda:echo")
.setExchangePattern(ExchangePattern.InOnly)
.bean(new HazelcastForwarder(), "onMessage");
プロデューサーからの応答を待っていないため、InOnly にあります。これは単なる転送です。
では、なぜ Camel は停止しているのでしょうか。停止していると言っている人からのメッセージはありません。Camel にそのようなデフォルトの動作はありますか。どのような場合に?
ありがとう!