我有一个 bean 生产者和一个 bean 消费者,在一条路线中使用。生产者是通过一个线程产生的,并在 hazelcast 队列上侦听数据(它可以是其他任何东西,我相信甚至可以是本地随机生成的数据)。
数据被发送到 seda 端点,以确保并发。消费者获取数据并将其转发到另一个 hazelcast 队列。但同样,它可能是其他任何东西。
它运行良好,但一段时间后,骆驼关闭,我找不到原因。
以下是我看到的一些消息:
处理大量数据...
[ 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 中是否存在这样的默认行为。在哪些情况下?
谢谢!