2013-08-13 8 views
3

Я процесс верблюда (который я запускаю из командной строки), какой маршрут похож на это:процесс верблюда не выключение из-за (не существующие) авиастюардессы обменов

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

+0

Может быть ошибка в компоненте верблюд-пустельги. Можете ли вы попробовать изменить concurrentConsumers = 1 и посмотреть, поможет ли это. А также, если вы установите его на = 5, то верблюд говорит, что есть 5 сообщений о взломе? –

+0

С concurrentConsumer = 1 все работает. С concurrentConsumer = 5 одинаковых проблем с 5 сообщениями с подсветкой. Я думаю (хотя я не совсем уверен), что эта проблема возникла после перехода от 2.10.x к 2.11.x. – Teudimundo

+0

Не забудьте зарегистрировать JIRA в Apache Camel об этой ошибке –

ответ