Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spark:具有CompletableFutures的非阻塞路由/回调_Java_Multithreading_Callback_Future_Spark Java - Fatal编程技术网

Java Spark:具有CompletableFutures的非阻塞路由/回调

Java Spark:具有CompletableFutures的非阻塞路由/回调,java,multithreading,callback,future,spark-java,Java,Multithreading,Callback,Future,Spark Java,我必须在Spark API实现中调用长时间运行的方法。这些方法返回CompletableFutures,因此我想通过触发Spark在回调中响应客户机请求来释放当前线程。 据我所知,这是不可能的火花,但我想确保我没有忽视任何东西。 要说明这个问题,请参见下面的小代码示例 import spark.Spark; import java.util.concurrent.CompletableFuture; public class HelloSpark { public static vo

我必须在Spark API实现中调用长时间运行的方法。这些方法返回CompletableFutures,因此我想通过触发Spark在回调中响应客户机请求来释放当前线程。 据我所知,这是不可能的火花,但我想确保我没有忽视任何东西。 要说明这个问题,请参见下面的小代码示例

import spark.Spark;
import java.util.concurrent.CompletableFuture;

public class HelloSpark {

    public static void main(String[] args) {
        Spark.get("/what_i_have_to_do", (req, res) -> {
            CompletableFuture<String> f = callToSlowWorker();
            return f.get();
        });

        Spark.get("/what_i_would_like_to_do", (req, res) -> {
            CompletableFuture<String> f = callToSlowWorker();
            f.whenComplete((answer, throwable) -> {
                if(throwable != null){
                    // send error to requesting client
                    res.status(500);
                    res.body(throwable.getMessage());
                } else {
                    // send answer to requesting client
                    res.body(answer);
                }
                // trigger spark to return the response to the client
                // ...?!?
            });
            return null; // obviously not what I want, just to make this sample code compile
        });
    }

    static CompletableFuture<String> callToSlowWorker(){
        return CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ignored) {
            }
            return "Hello World";
        });
    }
}
导入spark.spark;
导入java.util.concurrent.CompletableFuture;
公共类HelloSpark{
公共静态void main(字符串[]args){
Spark.get(“/what\u i\u have\u to\u do”,(req,res)->{
CompletableFuture f=callToSlowWorker();
返回f.get();
});
Spark.get(“/我想做什么”,(请求,res)->{
CompletableFuture f=callToSlowWorker();
f、 完成时(回答,可丢弃)->{
if(可丢弃!=null){
//向请求客户端发送错误
物质状态(500);
res.body(throwable.getMessage());
}否则{
//向请求客户端发送应答
res.body(答案);
}
//触发spark以将响应返回给客户端
// ...?!?
});
return null;//显然不是我想要的,只是为了编译这个示例代码
});
}
静态CompletableFuture callToSlowWorker(){
返回CompletableFuture.SupplySync(()->{
试一试{
睡眠(1000);
}捕获(InterruptedException被忽略){
}
返回“你好世界”;
});
}
}

SparkJava当前仅阻塞,因此您所描述的是不可能的。对于非阻塞API,有一个开放的添加支持

SparkJava目前只阻塞,因此您所描述的是不可能的。对于非阻塞API,有一个开放的添加支持