Java ApacheCamel中的Restlet,在完成之前不锁定浏览器

Java ApacheCamel中的Restlet,在完成之前不锁定浏览器,java,asynchronous,apache-camel,integration,restlet,Java,Asynchronous,Apache Camel,Integration,Restlet,我们正在使用ApacheCamel集成平台,并通过RESTlet更新一些数据。我们想知道此更新的状态,因为它需要几个小时才能完成。我们的问题是,在程序完成之前,我们无法从程序中得到响应。由于载体类型是restlet类型,我们必须等待作业完成,因为浏览器正在等待作业完成。我们已经研究了异步方法来实现这一点,但restletdatacarrier似乎不支持异步 如果我们没有得到任何解决方案,我们会考虑使用线程池运行作业,但我们想知道是否有其他方法可以异步执行作业,因为我们以后可能会更广泛地使用cam

我们正在使用ApacheCamel集成平台,并通过RESTlet更新一些数据。我们想知道此更新的状态,因为它需要几个小时才能完成。我们的问题是,在程序完成之前,我们无法从程序中得到响应。由于载体类型是restlet类型,我们必须等待作业完成,因为浏览器正在等待作业完成。我们已经研究了异步方法来实现这一点,但restletdatacarrier似乎不支持异步

如果我们没有得到任何解决方案,我们会考虑使用线程池运行作业,但我们想知道是否有其他方法可以异步执行作业,因为我们以后可能会更广泛地使用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”方法中使用SEDA和waitForTaskToComplete=Never选项使其工作


我不确定我是否理解。您有代码在路由中添加延迟,但您也希望路由立即可用?这是对正在完成的某个作业的模拟,然后当作业正在运行时,我希望在该作业运行时获取该作业的状态。由于它现在在一个更大的项目中,我们在工作完成之前无法获得数据。我们已经注意到,camel将restlet调用放在队列中,并按顺序执行。当然,最好创建后端服务的模拟,然后添加延迟?您可以简单地创建一个seda队列到某个路由,它所做的只是返回您想要的任何消息。Seda是异步工作的,这应该会在GET之后将控制权返回到浏览器。我尝试使用Seda,但浏览器仍然挂起,直到Seda完成。我使用了from restlet->to seda:test,然后在from seda:test中加入延迟,使它能够像您所说的那样使用seda,并使用以下选项:.to(seda:test?waitForTaskToComplete=Never)。似乎我需要将此选项放在“to”方法中,因为它在“from”方法中不起作用。谢谢您的帮助
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");