Как убить родительский поток Apache Camel после успешного завершения процесса в автономном приложении?

#multithreading #apache-camel

#многопоточность #apache-camel

Вопрос:

Я запускаю основное автономное приложение Camel с помощью планировщика Unix.

Он инициирует маршруты; Но, поскольку у меня есть Thread.sleep(time) после context.start() .

Теперь сначала выполняется приложение; что бы ни было в маршрутах; и когда обработка маршрута завершается (stop (), приложение все еще работает и завершается, когда время ожидания потока истекло.

Есть идеи, как полностью остановить автономное приложение после завершения моего маршрута?

Ниже приведен фрагмент кода для справки:

     SimpleRegistry sr = new SimpleRegistry();
    sr.put("masterdata", dataSource);

    CamelContext context = new DefaultCamelContext(sr);
    try {

        context.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {

                 from("timer://alertstrigtimer?period=60samp;repeatCount=1")....
                 from("etc").....
                 from("etc").....
                 from("etc").stop()
          }})
         context.start();
        Thread.sleep(30000);
    } catch (Exception e) {
        LOGGER.warn("configure(): Exception in creationg flow:", e);
    }
  

Есть ли какой-либо способ в camel или может быть в java, чтобы убить поток после того, как маршрут camel остановит всю обработку.

Ответ №1:

У вас есть разные варианты, вот некоторые, которые я бы рассмотрел:

  1. используйте camel-main и настройте его на выключение, когда будет выполнено определенное количество обменов
  2. используйте политику маршрутизации и отключите контекст camel в соответствии с вашим собственным правилом