Я процесс верблюда (который я запускаю из командной строки), какой маршрут похож на это:процесс верблюда не выключение из-за (не существующие) авиастюардессы обменов
public class ProfilerRoute extends RouteBuilder {
@Override
public void configure() {
from("kestrel://my_queue?concurrentConsumers=10&waitTimeMs=500")
.unmarshal().json(JsonLibrary.Jackson, MyClass.class)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
/* Do the real processing [...] */
exchange.getIn().setBody(null);
}
})
.filter(body().isNotNull())
.to("file://nowhere");
}
}
Обратите внимание, что я уничтожая любое сообщение после его обработки, будучи чистым потребителем процесс.
Процесс запускается самостоятельно. В очереди нет другого процесса, очередь пуста. Однако, когда я пытаюсь убить процесс, процесс не умрет.
Из журналов я вижу следующие строки (с отступлением для удобства чтения):
[ Thread-1] MainSupport$HangupInterceptor INFO
Received hang up - stopping the main instance.
[ Thread-1] MainSupport INFO
Apache Camel stopping
[ Thread-1] GuiceCamelContext INFO
Apache Camel 2.11.1 (CamelContext: camel-1)
is shutting down
[ Thread-1] DefaultShutdownStrategy INFO
Starting to graceful shutdown 1 routes
(timeout 300 seconds)
[l-1) thread #12 - ShutdownTask] DefaultShutdownStrategy INFO
Waiting as there are still 10 inflight and
pending exchanges to complete,
timeout in 300 seconds.
И так далее с уменьшением времени ожидания. В конце тайм-аута я получаю на бревнах:
[l-1) thread #12 - ShutdownTask] DefaultShutdownStrategy INFO
Waiting as there are still 10 inflight and
pending exchanges to complete,
timeout in 1 seconds.
[ Thread-1] DefaultShutdownStrategy WARN
Timeout occurred.
Now forcing the routes to be shutdown now.
[l-1) thread #12 - ShutdownTask] DefaultShutdownStrategy WARN
Interrupted while waiting during graceful
shutdown, will force shutdown now.
[ Thread-1] KestrelConsumer INFO
Stopping consumer for
kestrel://localhost:22133/my_queue?concurrentConsumers=10&waitTimeMs=500
Но процесс не умрет в любом случае (даже если я пытаюсь убить его в данный момент).
Я бы ожидал, что после времени ожидания все потоки поймут, что остановка продолжается и останавливается.
Я читал документ "Graceful Shutdown", однако я не мог найти то, что объясняет поведение, с которым я сталкиваюсь.
Как вы можете видеть из журналов, я использую версию Apache Camel версии 2.11.1.
ОБНОВЛЕНИЕ: По словам Клауса Ибсена, это может быть проблемой компонента верблюжьей пустельги. Я подал вопрос о ASF Jira для Camel: CAMEL-6632
Может быть ошибка в компоненте верблюд-пустельги. Можете ли вы попробовать изменить concurrentConsumers = 1 и посмотреть, поможет ли это. А также, если вы установите его на = 5, то верблюд говорит, что есть 5 сообщений о взломе? –
С concurrentConsumer = 1 все работает. С concurrentConsumer = 5 одинаковых проблем с 5 сообщениями с подсветкой. Я думаю (хотя я не совсем уверен), что эта проблема возникла после перехода от 2.10.x к 2.11.x. – Teudimundo
Не забудьте зарегистрировать JIRA в Apache Camel об этой ошибке –