0
我们正在使用Apache Camel集成平台,并通过restlets更新一些数据。我们想知道此更新的状态,因为它需要几个小时才能完成。我们遇到的问题是,在程序结束之前,我们没有收到程序的回应。由于载体类型是restlet类型,所以我们必须等到作业完成,因为浏览器正在等待它完成。我们已经研究了异步方式来做到这一点,但它似乎并不支持restlet数据载体。Restlet在Apache Camel中没有锁定浏览器直到完成
如果我们没有得到任何解决方案,我们已经考虑使用线程池来运行这个工作,但是我们想知道它是否是其他方法来执行作业异步,因为我们可能会稍后更广泛地使用骆驼restlet并让作业去async最好不要每次都执行线程。
示例代码:
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秒它响应之前。我们希望浏览器立即可用,并在此期间获取数据。
我不知道我理解。您的代码会在路线中添加延迟,但您还希望路线立即可用? –
这是一个正在完成的工作的模拟,然后当工作正在运行时,我想在运行时获得该工作的状态。因为它现在在一个更大的项目中,我们无法获得数据,直到工作完成。我们已经注意到骆驼将restlet调用放在队列中,并按顺序执行 – Tor
当然,最好创建一个后端服务的模拟,然后添加一个延迟?你可以简单地创建一个seda队列到一些路由,它所做的就是返回你想要的任何消息。 Seda工作异步,并应在GET后将控制权返回给浏览器。 –