Обратный вызов Apache Camel onCompletion не запускается после завершения маршрута - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть следующие настройки маршрута на верблюде.Я разместил полный код здесь.После того, как ProcessorTwo вызван, я ожидаю, что ProcessorOnComplete будет вызван, но он вообще не запущен.Что мне здесь не хватает?

открытый класс CamelRoute расширяет RouteBuilder {

    @Override
    public void configure() throws Exception {
        from("disruptor:routingChannel?concurrentConsumers=10")
            .onCompletion()
            .process(new ProcessorOnComplete())
            .end()
            .to("disruptor:processingOne?concurrentConsumers=10")
            .process(new ProcessorOne())
            .to("disruptor:processingTwo?concurrentConsumers=10")
            .process(new ProcessorTwo())
            .stop();
    }
}

public class ProcessorOne implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        System.out.println("Procesing one");
    }
}

public class ProcessorTwo implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        System.out.println("Procesing two");
    }
}

public class ProcessorOnComplete implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        System.out.println("Completion Mayuran");
    }
}

public class Main {
    public static void main(String[] args) throws Exception {
        CamelContext camelContext = new DefaultCamelContext();
        camelContext.addRoutes(new CamelRoute());
        camelContext.start();

        ProducerTemplate producerTemplate = camelContext.createProducerTemplate();

        producerTemplate.sendBody("disruptor:routingChannel", "Message");

        Thread.sleep(1000*1000);
    }
}

1 Ответ

0 голосов
/ 08 декабря 2018

onCompletion() запускается, когда я тестирую его, при условии, что у меня есть потребители для сообщений, отправляемых в очереди прерывателей.

Вы увидите описанное вами поведение, если Exchange имеет значение InOnly, и вы не 'не может быть ничего, что потребляет сообщения, отправленные на disruptor:processingOne или disruptor:processingTwo

onCompletion ожидает обработки сообщений в очередях прерывателя.

Процессоры ProcessorOne() иProcessorTwo() вызваны, потому что верблюд не ждет ответа, так как обмен - это InOnly.

Если Exchange имеет значение InOut, тогда маршрут будет ожидать ответа от первого прерывателя и, вероятно, тайм-аут после 30секунд.Таким образом, вы не увидите свои сообщения от процессоров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...