Java 取消正在使用的长时间运行的Web服务

Java 取消正在使用的长时间运行的Web服务,java,playframework,akka,Java,Playframework,Akka,我正在使用Play2和Java来编写一个Web服务,它运行一个计算成本相当高的操作。根据文档,我已将流程分解为一系列承诺,类似于: // Do some IO stuff on a background thread Promise<ExtractionResult> extractDataPromise = Akka.future(new Callable<ExtractionResult>(){ @Override public ExtractionR

我正在使用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
)
<> P>从我在文档中所读到的,你不能在执行过程中把一个演员灌输,也就是说,我不能在执行IO或在LunGununCalm的中间执行上面的链的取消。是否可以取消链接调用之间的整个操作?也就是说,如果用户发出取消请求,我是否可以设置一个标志,使操作可以检查为基本上变为无操作并返回空结果?是否有其他建议的方法来取消长时间运行的服务请求


我对Play和底层Akka框架都相当陌生,所以我愿意接受建议。谢谢

您可以尝试实现某种可取消的未来,并从参与者处返回它。类似scala的东西。基本上就是我最后做的。谢谢