问题标签 [deferred-result]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1499 浏览

spring - 直接设置延迟结果不返回正文

我正在使用 Spring Boot 2.0 并在 an 中有一个@RestController返回 a的端点,DeferredResult并且在某些情况下(例如,如果不需要计算所需的值DeferredResult直接设置结果,如下所示:

不幸的是,返回的 HTTP 正文是空的。状态码 200 表明请求没有超时,如果我将完成处理程序添加到延迟结果,也会调用该处理程序。

当我显式创建一个新线程并在一小段睡眠后将结果设置在该线程上时,该问题也没有得到解决。

我必须改变什么才能让DeferredResult实际正确序列化?

编辑:

正如评论中所建议的,我打开了 Spring MVC 的调试日志记录并发现了以下日志消息:

结果似乎一开始写得正确,但由于某种原因,一个空的 ModelAndView 被返回给 servlet。

什么可能导致这种情况?

0 投票
0 回答
134 浏览

java - 设置 DeferredResult setResult 方法后很晚才发回响应

我有一个 REST 控制器,使用 Spring MVC 实现。控制器使用来自服务方法的验证后收到的响应设置 DeferredResult setResult 方法。

但是,设置响应后没有立即通知工作线程,并且我的响应延迟了。使用 Chrome 调试器,我在“网络”选项卡下收到以下消息,反对我的 REST 调用。

但是,等待 2 分钟后,状态会更新为“200”并显示响应。

0 投票
0 回答
158 浏览

spring-boot - 如何使用zuul拦截异步请求(DeferredResult)?

我正在编写一个通知系统。客户端将通过 http-long-polling(带有 DeferredResult 的 Spring 异步请求)从服务器获取通知。现在我需要限制服务器可以保持的总连接数和客户端应该保持的最大连接数。对于许多请求,所有超出配额的连接都将被拒绝,状态码为 429。

我正在尝试使用 spring-cloud 和 zuul 来做到这一点。但是我不知道 hou 用 zuul 拦截异步请求的生命周期。

0 投票
0 回答
31 浏览

spring - Spring Web MVC:使用 DeferredResult 执行 FORWARD

我们DeferredResult在 Controller 方法中使用。如何执行FORWARD到另一个控制器方法?

我知道如何执行重定向,但我不希望往返浏览器和返回。我也知道如何通过返回 aModelAndViewString从控制器方法返回 a 来执行 FORWARD。但我被限制使用DeferredResult.

如何执行DeferredResult类似于返回类似 ' 的字符串的 FORWARD "forward:/forwardUrl"

0 投票
0 回答
156 浏览

spring-boot-test - 如何使用 webmvctest 在 springboot 测试中启用异步?

这是我的测试用例:

这个“sampleapi”返回一个 DeferredResult 对象。当我运行这个测试用例时,我收到以下错误。

我对springboot比较陌生,之前这个单元案例是使用@SpringBootTest编写的,这个案例运行成功,后来我发现我可以在不实际加载所有内容的情况下运行测试用例,所以我切换到@WebMvcTest。我修复了所有其他依赖项(@MockBean)。现在我真的坚持这一点。我对这个问题的理解是使用 mockmvc 时没有启动异步。如果有人能告诉我如何解决它会很棒,因为我被卡住了。

0 投票
0 回答
14 浏览

spring - 弹簧延迟响应和路由器功能

我正在编写一个 spring-mvc REST 应用程序(由于很多原因,我们还不能使用反应式弹簧)。我还使用路由器功能来路由 REST 请求。对于一个 REST 请求,我需要向另一个网站发出自己的请求,以获取我将在收到的请求中返回的数据。因此,用户调用我的端点,我调用另一个网站。当我从其他网站获得结果时,我会将信息返回给我的用户。

我不想在等待响应时占用线程,而是想使用 DeferredResult (或类似的东西)。这是否可以通过路由器功能实现,或者我只需要使用基于注释的路由。有什么例子吗?

0 投票
0 回答
19 浏览

spring - Spring Boot 拦截器 - 对另一个服务执行阻塞网络调用

我们想对 Spring Boot 应用程序中的所有 API 端点执行验证。验证逻辑依赖于将少量请求属性传递给另一个服务 S 并从该远程服务 S 获取验证结果。此验证逻辑对所有 API 端点都是通用的。

我们希望以 Spring MVC 拦截器或 Servlet 过滤器的形式只实现一次验证器。但是,在任一拦截器/过滤器中,我们都需要对服务 S 进行网络调用。

实现这一目标的最佳方法是什么?如果没有通用的拦截器/过滤器验证器,此验证将成为每个 Spring Rest Controller 的每个 API 端点的一部分,然后我们可以返回DeferredResult。但是,将此逻辑推送到 Interceptor 会使原始 Rest 控制器处理程序中的 DeferredResult 难以使用。

0 投票
0 回答
74 浏览

java - DeferredResult 延迟 HTTP 线程但不返回浏览器

我了解了异步服务的一些想法,但没有编写很多代码,因此尤其是 Java 中的机制对我来说是新的。基本上,我有一个长时间运行的服务,我想将它分叉到另一个线程,并能够使用不同的服务检查它的状态。现在,我可以开始工作了,我还没有办法检查它。但更糟糕的是:

在下面的 POST 服务asyncUploadSoftLayerFile中:

Spring 确实做了延迟的事情,我可以看到它把工作交给了另一个线程。但它没有返回给调用者。相反,我看到:

所以它只是部分地给了我想要的东西。我怎样才能让 Spring 将工作派生到另一个线程(并且理想情况下能够通过另一个 Web 服务调用引用该进程),但立即向 Web 浏览器返回某种响应?

这是开始工作的一部分,但会随着工作的进行跟踪完成的百分比。