我們有一個數據處理應用程序,該程序可以在Karaf 2.4.3上使用駱駝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秒。 –