2016-12-16 102 views
-1

我有一個在運行時管理的RouteBuilder。我想在發送錯誤而不向客戶端發送響應時斷開我的客戶端與路由的連接。我也需要在整個過程中保持路由。我可以做什麼來斷開客戶端而不停止我的路線?任何幫助將不勝感激。如果發生錯誤並繼續路由,Apache Camel從路由斷開連接

@Override 
public void configure() throws Exception { 

    onException(Exception.class) 
    .handled(true) 
    .process(new Processor() { 

     @Override 
     public void process(Exchange exchange) throws Exception { 
      Log.error(String.format(Constants.ERROR_ROUTING_TO, endPointFrom.toUrl(), endPointTo.toUrl(), 
       exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class))); 
      //TODO I WANT TO DISCONNECT FROM ROUTE HERE 
     } 

    }); 

    from(endPointFrom.toUrl()) 
    .routeId(endPointFrom.getId()) 
    .description(endPointFrom.toString()) 
    .process(new Processor() { 

     @Override 
     public void process(Exchange exchange) throws Exception { 


     } 
    }) 
    .to(endPointTo.toUrl()); 

} 
+0

取決於您正在使用的組件/客戶端,以及這是否可能。你不會說什麼正在使用。 –

+0

我忘了這個,我使用碼頭組件 –

回答

0

我通過交換變量設置爲null的響應體等Apache的駱駝斷開連接客戶端不發送響應消息解決我的問題。

@Override 
public void configure() throws Exception { 

    onException(Exception.class) 
    .handled(true) 
    .process(new Processor() { 

     @Override 
     public void process(Exchange exchange) throws Exception { 
      Log.error(String.format(Constants.ERROR_ROUTING_TO, endPointFrom.toUrl(), endPointTo.toUrl(), 
       exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class))); 
       exchange.getOut().setBody(null); 
     } 

    }); 

    from(endPointFrom.toUrl()) 
    .routeId(endPointFrom.getId()) 
    .description(endPointFrom.toString()) 
    .process(new Processor() { 

     @Override 
     public void process(Exchange exchange) throws Exception { 

     } 

    }) 
    .to(endPointTo.toUrl()); 

}