Apache Camel 中的 Restlet 没有锁定浏览器直到完成
Restlet in Apache Camel without locking browser until completion
我们正在使用 Apache Camel 集成平台,并且正在通过 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 秒。我们希望浏览器立即可用,并在此期间获取数据。
在 "to" 方法中使用带有选项 waitForTaskToComplete=Never 的 SEDA 使其工作。
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");
我们正在使用 Apache Camel 集成平台,并且正在通过 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 秒。我们希望浏览器立即可用,并在此期间获取数据。
在 "to" 方法中使用带有选项 waitForTaskToComplete=Never 的 SEDA 使其工作。
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");