长轮询DeferredResult原理

news/2024/12/22 21:17:57 标签: java, spring

DeferredResult常用来实现客户端长轮询,可以将异步处理的结果在特定时间内(如果设置了超时时间)返回给客户端。

java">@Slf4j
@RestController
@RequestMapping("/demo")
public class DemoDeferredResult {

    @GetMapping("/deferredResult")
    public DeferredResult<ApiResponse<String>> getDeferredResult(@RequestParam String param) {
        DeferredResult<ApiResponse<String>> deferredResult = new DeferredResult<>();
        deferredResult.onCompletion(() -> log.info("onCompletion"));
        deferredResult.onTimeout(() -> log.info("onTimeout"));

        new Thread(() -> {
            try {
                Thread.sleep(60000);
            } catch (InterruptedException e) {
                log.error("InterruptedException", e);
            }
            deferredResult.setResult(ApiResponse.success(param + UUID.randomUUID()));
        }).start();

        return deferredResult;
    }

}

流程:
1.请求发送到服务端
2.处理器处理controller方法,返回DeferredResult
3.返回值处理器根据DeferredResult调用 selectHandler 选择对应的处理器DeferredResultMethodReturnValueHandler
4.handleReturnValue方法里面通过WebAsyncUtils.getAsyncManager(webRequest).startDeferredResultProcessing(result, mavContainer) 处理异步请求
5.设置addTimeoutHandler,addErrorHandler,addCompletionHandler,setResultHandler等处理器,最关键的是setResultHandler,后续在deferredResult.setResult时会调用
6.异步结果处理完之后,也就是业务代码调用deferredResult.setResult时会执行resultHandler逻辑
7.最终会执行this.asyncWebRequest.dispatch();分发请求,返回给客户端


http://www.niftyadmin.cn/n/5795891.html

相关文章

2.4 网络概念(分层、TCP)

网络层与传输层概述 网络层&#xff1a; 抽象概念&#xff1a;网络层是基于 IP 的抽象概念&#xff0c;与数据链路层用 MAC 地址标记设备不同。MAC 地址是一种具体化的概念&#xff0c;绑定于所在的物理网络&#xff0c;而 IP 地址可以是固定的&#xff0c;也可以通过路由动态…

Word图片嵌入格式不正确的解决办法

问题描述: 如图, 粘贴到word的图片只显示底部一部分 解决方法: 第一步 先将图片嵌入文本行中 第二步 再将图片设置为正文格式 然后就出来了

CCNP_SEC_ASA 第四天作业

1. 在不使用任何 ACL的前提下&#xff0c;使得 Inside路由器可以 Ping通 Outside路由器。 提示&#xff1a;需要看到如下输出信息。 Inside#ping 202.100.1.1 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 202.100.1.1, timeout is 2 seconds: !!!!! …

2025前端面试热门题目——计算机网络篇

计算机网络篇——面试 1. 到底什么是 TCP 连接? TCP 连接的定义 TCP&#xff08;传输控制协议&#xff09;是一个面向连接的传输层协议。TCP 连接是通过 三次握手 确立的可靠数据通信链路&#xff0c;保证了在不可靠网络&#xff08;如互联网&#xff09;上的数据传输的准确…

备忘一个FDBatchMove数据转存的问题

使用FDBatchMove的SQL导入excel表到sql表&#xff0c;设置条件时一头雾水&#xff0c;函数不遵守sql的规则。 比如替换字段的TAB键值为空&#xff0c;replace(字段名,char(9),)竟然提示错误&#xff0c;百思不得其解。 试遍了几乎所有的函数&#xff0c;竟然是chr(9)。 这个…

FPGA新闻速览-WiMi开发基于FPGA的数字量子计算机验证技术

北京时间2024 年 12 月 18 日 -- 全球领先的全息增强现实 (AR) 技术提供商微美全息云 (WiMi Hologram Cloud Inc.) (纳斯达克股票代码&#xff1a;WiMi)宣布&#xff0c;其研发团队开发了一项革命性的技术——基于 FPGA 的数字量子计算机验证技术。该技术通过使用数字量子比特&…

前端在WebSocket中加入Token

在WebSocket通信中加入Token主要是为了实现身份验证和授权&#xff0c;确保只有经过验证的用户可以建立WebSocket连接。由于WebSocket API本身不支持直接在连接时设置HTTP头部&#xff0c;因此需要采用一些变通的方法来传递Token。以下是几种常见的方法&#xff1a; 1、通过UR…

Hadoop实现WordCount详解

文章目录 Hadoop实现WordCount详解一、引言二、Hadoop WordCount实现步骤1、环境搭建2、编写WordCount程序2.1、Mapper类2.2、Reducer类2.3、驱动类 三、编译与打包四、运行WordCount程序五、总结 Hadoop实现WordCount详解 一、引言 在大数据处理领域&#xff0c;WordCount是…