首页 > 其他分享 >springwebFlux 版本对应关系

springwebFlux 版本对应关系

时间:2024-04-22 11:13:35浏览次数:36  
标签:Mono class 对应 响应 User 版本 springwebFlux id

springwebFlux是 spring5 、springboot2.4 、springcloud2020

  • webFlux 采用响应式编程 使用Rsocket 协议 代替 HTTP
  • 使用场景主要在springcloud gateway、日志 ,监控检测等等

springwebFlux 和springmvc 的相同点

  • 其实是一个升级版 架构基本一致
  • sprimgmvc ServletRequest-》= FilterChain-》DispatcherServlet-》HandlerMapping-》HandlerAdapter-》Handler
  • springwebFlux ServletRequest-》= WebFilterChain-》DispatcherServlet-》HandlerMapping-》HandlerAdapter-》Handler
  • 都可以使用@Request-Mapping注解的控制器方法上

springwebFlux 和 springmvc 的相同点

  • sprimgmvc 是同步阻塞请求响应类型 拉模型
  • springwebFlux 属于异步飞阻塞的消息驱动模型
  • springwebFlux可以通过响应式Web API创建 handler

// 响应式注解 返回值Mono
@RestController
@RequestMapping(value="users")
public class UserController {
  @GetMapping(value = "/{id}")
  public Mono<User> getUserById(@PathVariable Long id) {
    User user = new User();
    ...
    return Mono.just(user);
  }
}
//  响应式API
// ServerRequest、ServerResponse、HandlerFunction和RouterFunction

// HandlerFunction
@Configuration
public class UserHandler {
  @Autowired
  private UserService userService;
  public Mono<ServerResponse> getUserById(ServerRequest request) {
    Long userId = request.pathVariable("userId");
    return
    ServerResponse.ok().body(this.orderService.getUserById(userId),User.class);
  }
}
// RouterFunction
RouterFunction<ServerResponse> userRoute = route(GET("/users/{id}").and(accept(APPLICATION_JSON)),userHandler::getUserById);

响应式客户端

  • Rest-Template的主要问题在于不支持响应式流规范,也就无法提供非阻塞式的流式操作
  • Spring WebFlux中提供了一个执行响应式远程访问的WebClient工具类 ,可以认为它就是RestTemplate的响应式升级版本
  • WebClient也提供了一组来访问远程响应式Web服务,日常开发过程中比较常用的包括retrieve()方法和exchange()方法
// retrieve 获取响应主体并对其进行解码
WebClient webClient = WebClient.create("http://localhost:8080");
Mono<User> user = webClient.get()
  .uri("/users/{id}", id)
  .accept(MediaType.APPLICATION_JSON)
  .retrieve()
  .bodyToMono(User.class);

// exchange  响应结果是一个ClientResponse对象,包含了响应的状态码、Cookie等信息
Mono<User> result = webClient.get()
  .uri("/users/{id}", id)
  .accept(MediaType.APPLICATION_JSON)
  .exchange()
  .flatMap(response -> response.bodyToMono(User.class));

标签:Mono,class,对应,响应,User,版本,springwebFlux,id
From: https://www.cnblogs.com/guanchaoguo/p/18150125

相关文章

  • 实践展示openEuler部署Kubernetes 1.29.4版本集群
    本文分享自华为云社区《openEuler部署Kubernetes1.29.4版本集群》,作者:江晚正愁余。一、Kubernetes集群节点准备1.1主机操作系统说明序号操作系统及版本备注1CentOS7u9或OpenEuler22031.2主机硬件配置说明需求CPU内存硬盘角色主机名值8C8G1024GBmasterk8s-ma......
  • Kubernetes 部署集群1.28.2版本(无坑)
    初步搭建一个一个主节点和两个从节点Kubernetes1.28.2集群。先准备好机器|host|hostname|os|role|hardware||---|---|---|---|---||192.168.31.200|master01|centos7.9|control-plane|cpu:2c内存:3G硬盘1:50G||192.168.31.201|node01......
  • 对于前三次的pta题集练习,由于我的偷懒和迟钝,有许多部分没有完成,但在此我还是对题目集
    第一道大题题目信息7-1答题判题程序-1分数50作者蔡轲单位南昌航空大学设计实现答题程序,模拟一个小型的测试,要求输入题目信息和答题信息,根据输入题目信息中的标准答案判断答题的结果。输入格式:程序输入信息分三部分:1、题目数量格式:整数数值,若超过1位最高位不能为0,......
  • ubuntu 管理 python 版本
    2024-04-21   https://www.cnblogs.com/NJ-Leon/项目开发过程中,需要在python2和python3版本之间进行切换,我们使用virtualenvwrapper进行管理。一、解决python2.7安装过程中依赖问题WSL2+Ubuntu22.04LTS,默认已经安装python3.81.安装 aptitudesudo......
  • Ubuntu22.04版本安装对应版本ROS教程 (小白2024年)
    参考资料:(我是开了加速器,毕竟中间使用了github访问网址,国内免费加速器Steam++,开个github网站加速即可,不开我不知道行不行可以自己一试)ubuntu22.04安装ROS2详细教程-CSDN博客ROS安装详细教程——Ubuntu22.0.4LTS安装-CSDN博客我的虚拟机刚开始设置的是简体中文,此前已经通过......
  • Go的多版本问题
    Go多版本控制工具g在项目开发中,有可能会遇到不同版本使用的情况g继承了nvm、n、rvm等工具的思路本次是在windows系统下安装的安装g安装地址:Releases·voidint/g(github.com)根据自己的需求选择安装包环境配置解完压缩包之后,里面有一个g.exe文件在系统环境中配置......
  • 错误:System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本问题
    最近在虚拟机上搭一套新的开发环境,运行项目时报错。如果你的系统中已经安装了Oracle客户端软件,那么可能需要检查一些环境变量。例如,你可以通过在系统的环境变量中设置PATH变量来包含Oracle客户端的路径,这样可以帮助.NET框架找到所需的Oracle客户端软件。此外,如果你的Oracle客户......
  • uniapp安卓在线更新版本
    实现逻辑通过获取线上的版本号和app的版本号进行对比查看是不是最新版—app版本号小于线上版本号则不是最新版提示更新模拟检测更新请求起一个服务,也就是检测更新的接口返回值为最新版本号和最新版wgt文件下载地址,例:{  "code":0,  "msg":"success",  ......
  • 6.Centos7 安装最新版本 Kubernetes + Docker
    在Centos7安装最新版本Kubernetes+Docker1.容器运行时说明:v1.24之前的Kubernetes版本直接集成了DockerEngine的一个组件,名为dockershim。自1.24版起,Dockershim已从Kubernetes项目中移除。需要在集群内每个节点上安装一个容器运行时以使Pod可以运行在上面......
  • Windows10中多屏显示器型号获取并与Screen对应
    需求:标识某块屏,不参与窗口快速移动@@@codepublicclassMonitor{///<summary>///DeviceID,如:\\.\DISPLAY17///</summary>publicStringDeviceName{get;set;} ///<summary>///名称,如:Def......