2017-01-16 26 views
2

У нас есть приложение для обработки данных, которое работает на Karaf 2.4.3 с Camel 2.15.3.Остановка маршрута верблюда из-за пределов маршрута

В этом приложении у нас есть куча маршрутов, которые импортируют данные. У нас есть вид управления, в котором перечислены эти маршруты и где каждый маршрут можно запустить. Эти маршруты не напрямую импортируют данные, а вызовы других маршрутов (некоторые из них в других пакетах, вызываемые через direct-vm), иногда напрямую, а иногда и в сплиттере.

Есть ли способ полностью остановить маршрут или, следовательно, остановить весь обмен от дальнейшей обработки?

Когда просто используя stopRoute функцию:

route.getRouteContext().getCamelContext().stopRoute(route.getId()); 

я в конечном итоге получить сообщение успех Graceful shutdown of 1 routes completed in 10 seconds - обмен все еще обрабатывается, хотя ...

Так что я пытался имитировать поведение из StopProcessor, установив свойство стоп, но это тоже не помогло:

public void stopRoute(Route route) { 
    try { 
     Collection<InflightExchange> browse = route.getRouteContext().getCamelContext().getInflightRepository() 
       .browse(); 
     for (InflightExchange inflightExchange : browse) { 
      String exchangeRouteId = inflightExchange.getRouteId(); 
      if ((exchangeRouteId != null) && exchangeRouteId.equals(route.getId())) { 
       this.stopExchange(inflightExchange.getExchange()); 
      } 
     } 
    } catch (Exception e) { 
     Notification.show("Error while trying to stop route", Type.ERROR_MESSAGE); 
     LOGGER.error(e, e); 
    } 
} 

public void stopExchange(Exchange exchange) throws Exception { 
    AsyncProcessorHelper.process(new AsyncProcessor() { 

     @Override 
     public void process(Exchange exchange) throws Exception { 
      AsyncProcessorHelper.process(this, exchange); 
     } 

     @Override 
     public boolean process(Exchange exchange, AsyncCallback callback) { 
      exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE); 
      callback.done(true); 
      return true; 
     } 
    }, exchange); 
} 

есть ли способ полностью остановить обмен от обработки из-за пределов маршрута?

+1

Вы видели эту страницу https://camel.apache.org/how-can-i-stop-a-route-from-a-route.html? – ltsallas

+0

@ Itsallas Я видел это, но он говорит, что вы должны использовать функцию stopRoute, которая по какой-то причине не останавливает обмен от дальнейшей обработки. – maxdev

+0

Используйте http://camel.apache.org/graceful-shutdown.html. но установите тайм-аут на 0 или только 1-2 секунды. –

ответ

1

Вы можете получить обмен? Использую exchange.setProperty(Exchange.ROUTE_STOP, true); Маршрут останавливает поток и не переходит к следующему маршруту.

+0

Привет, друг, спасибо за ответ. в моем вопросе я уже пытался использовать свойство «ROUTE_STOP», но это не сработало. Я еще не пробовал его в новом Karaf/Camel, возможно, сейчас это работает. – maxdev

 Смежные вопросы

  • Нет связанных вопросов^_^