我们正在使用Apache集成平台,并通过restlets更新一些数据。我们想知道这个更新的状态,因为它需要几个小时才能完成。我们面临的问题是,在程序完成之前,我们无法从程序中得到响应。因为载体类型是restlet类型,所以我们必须等待作业完成,因为浏览器正在等待它完成。我们已经研究过异步的方法,但似乎restlet数据载体不支持异步。
如果我们没有得到任何解决方案,我们已经考虑过使用线程池运行作业,但是我们想知道是否还有其他方法来执行作业异步,因为稍后我们可能会更广泛地使用camel restlet,而让作业不每次执行线程就更好了。
示例代码:
from("restlet:" +BASE_URL + "test1?restletMethods=get").
routeId("Test 1").
log(LoggingLevel.INFO, log.getName(), "Test 1 Started").
delay(10000).
log(LoggingLevel.INFO, log.getName(), "Test 1 Complete").
to("mock:update");
从上面的代码来看,浏览器在响应之前等待10秒。我们希望浏览器立即可用,并在此期间获取数据。
发布于 2017-04-25 04:28:07
让它使用SEDA和" to“方法中的选项waitForTaskToComplete=Never一起工作。
from("restlet:"+BASE_URL+"seda?restletMethods=get").
routeId("SEDA async sender").
log(LoggingLevel.INFO, log.getName(), "SEDA test started").
log(LoggingLevel.INFO, log.getName(), "Transfer to SEDA...").
to("seda:test1?waitForTaskToComplete=Never");
from("seda:test1").
threads(4).
routeId("SEDA async receiver").
log(LoggingLevel.INFO, log.getName(), "SEDA active").
delay(4000).
log(LoggingLevel.INFO, log.getName(), "SEDA test complete");
//to("mock:update");
https://stackoverflow.com/questions/43588339
复制