2015-07-10 68 views
1

我正在開發消息路由器的過程中,部分設計是根據控制路由中放置的某些文件命令停止/暫停和啓動/恢復路由。掛起的駱駝路由報告沒有中止

我試圖遵循駱駝建議,以支持暫停/恢復路線作爲停止/啓動它的替代方案。

我的履歷邏輯取決於某些路線的狀態,說我有兩條路線ABC和XYZ不能同時活動。爲了促進這一點,我的控制路線支持兩個命令SUSPEND <route id> and RESUME <route id>。所以簡而言之,如果路線ABC沒有被暫停,那麼RESUME XYZ將不會執行任何操作。

我的單元測試(使用JMockit)通過了OK。然而,當運行實際應用程序時,我可以看到即使我之前暫停了路線ABC,路線XYZ也不會恢復。

我放了一些日誌條目,令我驚訝的是,在執行route.suspend("ABC")後,顯然成功地給出了駱駝日誌條目,ABC路徑仍報告爲未暫停。這是代碼:

LOGGER.info(r.getId() + " route supports suspension=" + r.supportsSuspension()); 
context.suspendRoute(r.getId()); 
LOGGER.info("After suspending route " + r.getId() + " the route suspended state is " + ((ServiceSupport) r).isSuspended()); 

及以下日誌條目:

[INFO ] my.org.message.router.lifecycle.DeactivateCommand - ABC route supports suspension=true 
[INFO ] org.apache.camel.impl.DefaultShutdownStrategy - Starting to graceful shutdown 1 routes (timeout 300 seconds) 
[INFO ] org.apache.camel.impl.DefaultShutdownStrategy - Route: ABC suspend complete, was consuming from: Endpoint[abc://queue:SOME_QUEUE] 
[INFO ] org.apache.camel.impl.DefaultShutdownStrategy - Graceful shutdown of 1 routes completed in 0 seconds 
[INFO ] org.apache.camel.spring.SpringCamelContext - Route: ABC is suspended, was consuming from: Endpoint[abc://queue:SOME_QUEUE] 
[INFO ] my.org.message.router.lifecycle.DeactivateCommand - After suspending route ABC the route suspended state is false 

所以我的問題是:

  1. 這是一個錯誤或我做了錯誤的方式
  2. 如果一個bug存在,或者我應該去停止/啓動的方式
  3. 如果我的錯誤什麼是正確的實現我追求的

的方式預先感謝您爲您的輸入

+0

可能是你的錯,因爲abc是一個自定義組件,請確保在doSuspend/doResume方法中執行你的工作,而不是暫停/恢復。 –

回答

1

是啊,這是在Apache的駱駝的錯誤不報告正確的狀態 - 路線真的暫停。我已經登錄了一張票:https://issues.apache.org/jira/browse/CAMEL-8964

您可以使用camelContext.getRouteStatus(routeId) api得到正確的狀態。