- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
客户端定期调用异步方法(长轮询),向其传递股票代码的值,服务器使用该值查询数据库并将对象返回给客户端。
我正在使用 Spring 的 DeferredResult类,但是我不熟悉它是如何工作的。请注意我如何使用符号属性(从客户端发送)来查询数据库以获取新数据(见下文)。
也许有更好的方法来使用 Spring 进行长轮询?
如何将符号属性从方法 deferredResult()
传递给 processQueues()
?
private final Queue<DeferredResult<String>> responseBodyQueue = new ConcurrentLinkedQueue<>();
@RequestMapping("/poll/{symbol}")
public @ResponseBody DeferredResult<String> deferredResult(@PathVariable("symbol") String symbol) {
DeferredResult<String> result = new DeferredResult<String>();
this.responseBodyQueue.add(result);
return result;
}
@Scheduled(fixedRate=2000)
public void processQueues() {
for (DeferredResult<String> result : this.responseBodyQueue) {
Quote quote = jpaStockQuoteRepository.findStock(symbol);
result.setResult(quote);
this.responseBodyQueue.remove(result);
}
}
最佳答案
DeferredResult在 Spring 4.1.7 中:
Subclasses can extend this class to easily associate additional data or behavior with the DeferredResult. For example, one might want to associate the user used to create the DeferredResult by extending the class and adding an additional property for the user. In this way, the user could easily be accessed later without the need to use a data structure to do the mapping.
您可以扩展 DeferredResult 并将符号参数保存为类字段。
static class DeferredQuote extends DeferredResult<Quote> {
private final String symbol;
public DeferredQuote(String symbol) {
this.symbol = symbol;
}
}
@RequestMapping("/poll/{symbol}")
public @ResponseBody DeferredQuote deferredResult(@PathVariable("symbol") String symbol) {
DeferredQuote result = new DeferredQuote(symbol);
responseBodyQueue.add(result);
return result;
}
@Scheduled(fixedRate = 2000)
public void processQueues() {
for (DeferredQuote result : responseBodyQueue) {
Quote quote = jpaStockQuoteRepository.findStock(result.symbol);
result.setResult(quote);
responseBodyQueue.remove(result);
}
}
关于spring - 使用 Spring 的 DeferredResult 进行长轮询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31458910/
我有这个 REST Controller @RequestMapping(path = "/hello", method = RequestMethod.POST) @ResponseStatus(H
我有一个 Spring Boot 应用程序和遗留代码, Controller 中有两个端点,这两个端点都返回不同对象的 DeferredResult<> ,现在我需要创建一个新端点,它基本上调用这两个
我正在使用DeferredResult在我的 Spring MVC 应用程序中处理一些可能长时间运行的操作的服务器端处理。它可能非常快,或者可能需要一两秒。 但无论哪种情况,传入的 HTTP 请求都会
我有一个旧的应用程序,客户端通过非常慢的连接(GPRS)上传大文件。目前我们使用Spring MVC和旧的servlet 2.0标准并直接获取请求inputStream,这显然会导致长时间运行的线程阻
我的应用程序应该有 2 个核心端点:push、pull 用于发送和获取数据。 拉取操作应该异步进行并产生 DeferredResult。当用户调用 pull service over rest 时,会
我正在使用 SpringBoot 1.4.4 创建异步 RESTful api。一切正常,除非请求被成功处理,DeferredResult> 总是有空主体和 200 OK 状态代码,即使我明确地将字符
我正在实现 long polling as per the Spring blog from some time ago . 这里我转换的方法与以前具有相同的响应签名,但不是立即响应,它现在使用长轮询
我正在尝试构建一个 REST 网络服务器,其中 GET 请求是非阻塞的,即使它需要进行稍微耗时的调用也是如此。 @RestController public class Endpoint {
为了实现长轮询,我尝试了不同的解决方案,但没有获得任何好的结果。 因此,我决定研究异步方法和 DeferredResult。这里我实现了 REST Controller 。 @Controller("
我有一个 comet(长轮询)Controller 调用,它接受一些 id 并 puts 然后进入阻塞队列,如果没有运行该 id 的计算,对于一个 Consumer 从 queue 中 take 并对
我在 Spring MVC 上使用 deferredResult,但是使用这段代码,超时仍然将 HTTP 代码 503 发送回客户端。 future.onCompletion(new Runnable
我有一个 Java 7 Spring Boot (1.5.4) RESTfull 服务,其端点返回 DeferredResult: @RequestMapping(value = "/download
我有一个 Guava ListenableFuture 实例和 Spring DeferredResult 的列表。我想为列表中第一个成功的 future 设置结果,或者如果超时尚未到期以从所有 fu
对于其余接口(interface),使用从 Controller 返回的 Spring MVC + RxJava + DeferredResult。 我正在考虑将 Hateoas 支持添加到端点。自然
以此为基础Jira 我有这个方法: val innerResult: DeferredResult[Object] = new DeferredResult[Object]() override de
我正在使用新的 spring 3.2 异步 servlet 请求。除了这一种情况之外,一切都运行良好... @RequestMapping("/test") @ResponseBody public
我在 Java 7 上使用 Spring 4.3.18 和 Spring Boot 1.5.14。 我正在实现一个 RestController 端点,它返回一个带有超时回调的 DeferredRes
Spring Web 3.2 带有一个用于异步请求处理的DeferredResult 类。它有一个 setErrorResult 用于在出现问题时提供替代响应,但没有提供 http 错误代码的选项。
Spring MVC 让 Controller 返回DeferredResult 和ListenableFuture(由ListenableFutureTask 实现)来做异步响应。有什么不同?我应该
客户端定期调用异步方法(长轮询),向其传递股票代码的值,服务器使用该值查询数据库并将对象返回给客户端。 我正在使用 Spring 的 DeferredResult类,但是我不熟悉它是如何工作的。请注意
我是一名优秀的程序员,十分优秀!