2014-10-08 72 views
0

我想能夠以編程方式控制基於條件的路線,但我找不到辦法。 我不想像ProcessorDefinition.stop()那樣停止路線的流動。 我試圖創建一個新的RoutePolicy沒有任何運氣。我可以根據條件暫停或恢復路線嗎?

public class ProjectStateRoutePolicy extends RoutePolicySupport { 

    // this would be a check to an outside service 
    private boolean shouldStartRoute = false; 

    @Override 
    public void onStart(Route route) { 
     suspendIfNotInValidState(route); 
    } 

    @Override 
    public void onResume(Route route) { 
     suspendIfNotInValidState(route); 
    } 

    private void suspendIfNotInValidState(Route route) { 
     if (!shouldStartRoute) { 
      try { 
       suspendRoute(route); 
      } catch (Exception e) { 
       throw ObjectHelper.wrapRuntimeCamelException(e); 
      } 
     } 
    } 
} 

根據我的理解onResume()等等是CamelContext具體的,而不是具體的路線。是否有適當的細粒度機制來了解路線生命週期?

我想成爲一個能夠控制路由的生命週期,即使有人試圖手動啓動路由,例如從JMX。

PS:我不認爲像RouteStartedEvent這樣的事件會滿足這個約束,因爲消息可能在接收和處理事件之間消耗。

+0

嗯可能[ControlBus](http://camel.apache.org/controlbus)組件可能在這種情況下是有用的。它是否正確? – gmich 2014-10-08 08:58:15

+0

Controlbus只適用於最新版本的駱駝 - 我們想使用它,但是當我們使用2.10時沒有運氣:( – vikingsteve 2014-10-08 12:12:12

+1

另一種「暫停」路由的方法當然是將bean編碼成你可以打開/關閉一個布爾標誌的路由 – vikingsteve 2014-10-08 12:12:59

回答

0

這裏有一些代碼可以做到這一點,因爲你有駱駝上下文和路由名稱。

public class StopRoute { 
    Logger log = LoggerFactory.getLogger(getClass().getName()); 

    public void stop(CamelContext camelContext, String routeId) throws Exception { 
     log.info("Stopping camel route: " + routeId); 
     camelContext.stopRoute(routeId, 2, TimeUnit.SECONDS); 
    } 
} 

與StartRoute類似。

然後你就可以在你的路線這樣使用它:

.bean(StopRoute.class, "stop(*, " + INCOMING_SNAPSHOTS.routeId() + ")") 

希望這有助於!

P.S. controlbus:基本上會做同樣的事情,據我所知;)

+0

好吧,這聽起來像你只需要使用一個持有狀態的bean,並根據該狀態禁用/啓用處理。 – vikingsteve 2014-10-09 10:29:33

+0

Thnx。但那不是我想要的。我想要的是根據路線範圍之外的情況,例如根據服務的狀態(開始,停止,現場,上線前......),以「自動」方式暫停和恢復路線。 )。我希望這個澄清一點,我在找什麼。 RoutePolicy可以幫助實現此目的,但它缺少RouteSuspendedEvent或RouteResumedEvent。只有RouteStartedEvent和RouteStoppedEvent事件已啓用。 – gmich 2014-10-09 10:31:25

+0

Yeap。但我想要一種優雅的方式來暫停或恢復路線,而不僅僅是禁用/啓用路線內的處理。 – gmich 2014-10-09 10:46:28