gpt4 book ai didi

spring - 使用 Spring + Jersey 的异步 API

转载 作者:行者123 更新时间:2023-12-04 13:00:26 26 4
gpt4 key购买 nike

我正在构建可能每秒有大量请求的 API,其中一些请求可能需要大量计算(复杂报告)。我被要求组装一个小型原型(prototype)作为概念证明。我使用带有 Jersey 的 Spring Boot 作为我的 JAX-RS 实现。过去我用 Spring MVC 做过类似的事情。

@RequestMapping(value = "/dashboard", method = RequestMethod.GET)
public DeferredResult<String> showDashboard(Model model) {
DeferredResult<String> result = new DeferredResult<>();
model.addAttribute("testObj", new User());
result.setResult("home/dashboard");
return result;
}

我在 Jersey 上试过这个,似乎可以工作,或者至少它没有抛出错误。
    @GET
public DeferredResult<String> getClients() {
DeferredResult<String> deferredResult = new DeferredResult<>();
deferredResult.setResult("Nothing! But I'm Async!");
return deferredResult;
}

然而,我在 Jersey 中看到的所有异步处理操作的例子都是这样的。
Produces(MediaType.TEXT_PLAIN)
public void get(@Suspended final AsyncResponse response) {
// This call does not block.
client.callExternalService(
// This callback is invoked after the external service responds.
new Callback<string>() {
public void callback(String result) {
response.resume("Result: " + result + ".n");
}
});
}

我的主要问题是这三个幕后代码片段之间有什么区别,如果有的话。这些都会完成同样的事情吗?

有没有更好的方法来完成异步?我也看到过在 Java 中使用 Future,但从未使用过。

更新:

我的泽西 Controller 中有以下代码,它们都可以正常工作。
    @GET
public String getClients() {
return "Nothing, I'm Sync!";
}

@GET
@Path("/deferred")
public DeferredResult<String> getClientsAsync() {
DeferredResult<String> deferredResult = new DeferredResult<>();
deferredResult.setResult("Nothing! But I'm Async!");
return deferredResult;
}

@GET
@Path("/async")
public void getClientsJAXRSAsync(@Suspended AsyncResponse response) {
new Thread(() -> {
response.resume("I am Async too! But I am using @Suspended");
}).start();
}

这又回到了我的主要问题,这些有什么区别?我的理解是 DeferredResult 是 Spring 的东西,所以不确定它是否适合与 Jersey 一起使用,尽管我使用的是 Jersey + Spring。

最佳答案

您的理解是正确的。两者都在做同样的工作。但是实现方式不同。 DeferredResult 是 spring 实现。在您的代码库中,大部分部分都是 JAX-RS 实现。我不确定您是否收到了第一服务的回复。

但我的意见是,要么使用 spring 类,要么使用 JAX-RS。但并非两者都采用相同的方法。

关于spring - 使用 Spring + Jersey 的异步 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31329882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com