У нас есть приложение для обработки данных, которое работает на 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);
}
есть ли способ полностью остановить обмен от обработки из-за пределов маршрута?
Вы видели эту страницу https://camel.apache.org/how-can-i-stop-a-route-from-a-route.html? – ltsallas
@ Itsallas Я видел это, но он говорит, что вы должны использовать функцию stopRoute, которая по какой-то причине не останавливает обмен от дальнейшей обработки. – maxdev
Используйте http://camel.apache.org/graceful-shutdown.html. но установите тайм-аут на 0 или только 1-2 секунды. –