路由A由quartz2組件觸發(根據cron時間表)。當路由A在某些情況下完成它的業務邏輯時,我需要觸發路由B,它將讀取給定目錄中的所有文件並將結果發送到另一個路由C,但不希望讓路由B始終運行。如何使用Apache Camel觸發路由並收集結果?
如何在路由A需要時只運行一次路由B?目前,我在路由A中使用'controlbus:'命令啓動路由B(autoStart = false),路由C再次使用'controlbus:'來停止路由B.能否爲我的用例提出更好的解決方案?
路由A由quartz2組件觸發(根據cron時間表)。當路由A在某些情況下完成它的業務邏輯時,我需要觸發路由B,它將讀取給定目錄中的所有文件並將結果發送到另一個路由C,但不希望讓路由B始終運行。如何使用Apache Camel觸發路由並收集結果?
如何在路由A需要時只運行一次路由B?目前,我在路由A中使用'controlbus:'命令啓動路由B(autoStart = false),路由C再次使用'controlbus:'來停止路由B.能否爲我的用例提出更好的解決方案?
類似的討論here可能會有所幫助。
'路由A'實現池查詢消費者輪詢來自給定目錄(當我們迭代)的所有文件。我們收到空體(檢查http://camel.apache.org/file2.html sendEmptyMessageWhenIdle選項)
public void process(Exchange exchange) throws Exception {
List<GenericFile> result = new ArrayList<GenericFile>();
String endpointUrl = "file:////tmp?sendEmptyMessageWhenIdle=true"
PollingConsumer pConsumer = camelContext.getEndpoint(endpointUrl).createPollingConsumer();
pConsumer.start();
GenericFile<File> gFile;
do {
Exchange ex = pConsumer.receive(SCAN_TIMEOUT);
gFile = (GenericFile<File>) ex.getIn().getBody();
if(gFile != null) {
result.add(gFile);
}
// use &sendEmptyMessageWhenIdle=true in file endpoint url OR set receive timeouts otherwise you will never know when folder scan has finished !!!
} while(gFile != null);
pConsumer.stop();
// other business logic
}
這是有幫助謝謝投票將被停止。我在路由A中實現了createPollingConsumer(),但它只返回目錄中的第一個文件,但我需要返回所有這些文件。 (我原來的路由B的實現使用聚合策略來返回給定目錄中的所有文件。) –