2017-01-16 166 views
2

我們有一個數據處理應用程序,該程序可以在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); 
} 

有沒有完全停止從路線外部處理交換的方法?

+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