我想能夠以編程方式控制基於條件的路線,但我找不到辦法。 我不想像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這樣的事件會滿足這個約束,因爲消息可能在接收和處理事件之間消耗。
嗯可能[ControlBus](http://camel.apache.org/controlbus)組件可能在這種情況下是有用的。它是否正確? – gmich 2014-10-08 08:58:15
Controlbus只適用於最新版本的駱駝 - 我們想使用它,但是當我們使用2.10時沒有運氣:( – vikingsteve 2014-10-08 12:12:12
另一種「暫停」路由的方法當然是將bean編碼成你可以打開/關閉一個布爾標誌的路由 – vikingsteve 2014-10-08 12:12:59