在Play中取消长时间运行的Web服务

时间:2013-05-29 12:49:57

标签: java playframework akka

我正在使用Play2(使用Java)编写一个运行计算成本相当高的操作的Web服务。根据文档,我将这个过程分解为一系列类似的承诺:

// Do some IO stuff on a background thread
Promise<ExtractionResult> extractDataPromise = Akka.future(new Callable<ExtractionResult>(){
    @Override
    public ExtractionResult call() throws Exception {

        return null;
    }
});

// Perform a couple computations based on the result
Promise<MyResult> longRunningComputation1 = extractDataPromise.map(
    new Function<ExtractionResult, MyResult>(){
        public MyResult apply(ExtractionResult er){
            return longRunningComputation();
        }
    }
)

Promise<MyResult> longRunningComputation2 = extractDataPromise.map(
    new Function<ExtractionResult, Result>(){
        public Result apply(ExtractionResult er){
            return longRunningComputation();
        }
    }
)

// Synchronize back up to make the result
Promise.sequence(longRunningComputation1, longRunningComputation2).flatMap(
    // Do something with the results
)

从我在文档中看到的内容,你不能在执行过程中阻止一个actor,也就是说,我无法在执行IO或在longRunningComputation中间取消上面的链。是否有可能取消链式呼叫之间的整个操作?也就是说,如果用户发出了取消请求,我是否可以设置一个操作可以检查的标志,实际上是无操作并返回null结果?是否有其他推荐的方法来取消长时间运行的服务请求?

我对Play和底层的Akka框架都很新,所以我愿意接受建议。感谢

0 个答案:

没有答案