Spring的 webFlux 和 webMVC

news2024/11/25 4:38:28

看到一个测评文章,并发在300的时候webMVC 和 webFlux的处理能力不相上下, 当并发达到3000的时候, webFlux明显优于webMVC, 有图有真相, 我信了.   webMVC 是 one-request-one thread 堵塞模式, flux是非阻塞模式, 是spring家族系列产品发展的两个方向.

参考文档:   

https://www.cnblogs.com/holddie/p/spring-webflux-er.html

:Spring | Reactive

Reactor 3 Reference Guide

Java的Stream流详细讲解_java stream_Mr Tang的博客-CSDN博客

springboot — 响应式编程WebFlux框架解析

Reactor是Spring WebFlux的首选响应式编程库。

 Java 8 中的 Stream 是对集合(Collection)对象功能的增强. 流不是数据结构,本身不存储数据.

Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。

springboot — 响应式编程WebFlux框架解析

从返回值可以看出,Mono 和 Flux 适用于两个场景,即:

  • Mono:实现发布者,并返回 0 或 1 个元素,即单对象
  • Flux:实现发布者,并返回 N 个元素,即 List 列表对象

Mono本质是一个publisher 发布者,  是一个抽象类,subscribe 方法是抽象的,等着底层去实现订阅绑定关系.

在http请求中,request请求相当于是订阅者,  底层会把request请求有组织并行的订阅publisher-> mono,  mono获取到数据后,分发给request请求.

MonoSink 相当于成功订阅之后的订阅关系,subscription. 

查看mono的源码,已经理解它的运转原理:

先看Java知识:Reactive Stream API响应式编程 - 知乎 这篇文章,理解订阅模式.

然后是web Flux的mono的理解, mono英文意思是"单声道的",就是一次只能传递一个值.  要么不传值,要么传递1个. 与之相对的是Flux, 传递是0...N 个值.  具体理解看下面的代码注解.

public Mono<Long> save(City city) {

        // return Mono.create(cityMonoSink -> cityMonoSink.success(cityRepository.save(city)));
        // return Mono.create(a -> a.success(cityRepository.save(city)));

        // monoSink 相当于订阅成功后的订阅关系, subscriber跟发布者之间的唯一通信通道. monosink.sucess 内部会触发subscriber的onNext方法
        // ,相当与在传数据.
        // Mono.create 本质上创建一个publisher,交给底层调度系统, 调度系统建立订阅关系,返回一个monoSink,
        // monoSink调用success方法,触发订阅者的onNext方法,广播数据.

        // Consumer 创建完成mono的一个回调函数,仅仅为了订阅关系subscription,也是monosink返回.
        // publisher 调用subscribe方法,建立publisher和subscriber之间的订阅关系,并且给一个订阅凭证.subscription.
        // 然后,publisher生产数据后, 给subscriber发送数据, 触发subscriber的onNext方法.
        return Mono.create(cityMonoSink -> cityMonoSink.success(cityRepository.save(city)));
    }

虽然记录的有点跳跃,不适合新手去学习。但核心的概念和知识点都在了。  我一直在想一个问题,如果一个程序员还需要被别人教的话,趁早转行吧。在信息大爆炸的时代,没有自主学习能力,特别是跟计算机打交道,说明入错行了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大神教你期权平仓操作技巧,期权交易规则一网打尽

期权交易主要是看涨开仓和看跌开仓&#xff0c;平仓就是盈亏或亏损平仓。期权的波动较快&#xff0c;所以开仓平仓也一定比较频繁。具体交易和期货的开仓和平仓都是一样的。期货是买涨、卖跌&#xff0c;期权是看涨、看跌。下文介绍期权如何平仓操作&#xff1f;本文来自&#…

系统架构设计师-数据库系统(1)

目录 一、数据库模式 1、集中式数据库 2、分布式数据库 二、数据库设计过程 1、E-R模型 2、概念结构设计 3、逻辑结构设计 三、关系代数 1、并交差 2、投影和选择 3、笛卡尔积 4、自然连接 一、数据库模式 1、集中式数据库 三级模式&#xff1a; &#xff08;1&#xff09;外…

一文讲解ARMv8内存属性与类型(Memory types and attributes)简介

ARMv8中将内存分为两种类型&#xff1a;Normal memory和Device memory&#xff0c;Normal memory适用于系统中的大部分内存&#xff0c;而Device memory则适用于外设所使用的内存。 1. Normal Memory Normal memory类型属性适用于系统中的大多数内存。它表示架构允许硬件对这…

《动手学深度学习 Pytorch版》 4.10 实战Kaggle比赛:预测比赛

4.10.1 下载和缓存数据集 import hashlib import os import tarfile import zipfile import requests#save DATA_HUB dict() DATA_URL http://d2l-data.s3-accelerate.amazonaws.com/def download(name, cache_diros.path.join(.., data)): #save"""下载一个…

湖北建筑行业建安C证交安C证水安C证报考介绍

湖北建筑行业建安C证交安C证水安C证报考介绍 湖北三类人员分为建设厅安全员C证、交通厅安全员C证、水利厅安全员C证&#xff0c;对应着建筑施工行业、公路工程行业、建筑水利行业等等。 湖北建设厅安全员C证&#xff08;建安C&#xff09; 湖北建筑安管考核管理系统-湖北建安…

JUC相关面试题

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱发博客的嗯哼&#xff0c;爱好Java的小菜鸟 &#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&#x1f44d;一下博主哦 &#x1f4dd;社区论坛&#xff1a;希望大家能加入社区共同进步…

亲测好用-obsidian无法打开插件库安装或更新的解决办法-结合FastGithub

写在前面 经过半年左右时间的使用情况验证该方案稳定可靠。 方案&#xff1a;插件“Plugin Proxy” 软件“FastGithub” 效果&#xff1a; 插件“Plugin Proxy” 下载地址&#xff1a; https://github.com/gslnzfq/obsidian-proxy-server 插件安装&#xff1a; 插件设置为…

虚拟人三维动画宣传片案例分享 | 广州“五羊”城市文化IP商业体裸眼3D广告影片

随着时代的发展元宇宙的助推&#xff0c;裸眼3D形式的宣传方式逐渐出现在大众眼前。以数字人IP的3D立体效果吸引大众目光&#xff0c;让其驻足拍照、录视频分享至社交平台&#xff0c;为企业品牌带来高频传播价值。 近日&#xff0c;广州“五羊”城市文化IP裸眼3D广告宣传片在广…

设计模式解析之模板方法模式:设计灵活可扩展的算法框架

目录 1. 引言2. 概要2.1 概念2.2 结构2.3 类图2.4 工作流程 3. 应用场景3.1 适用情况&#xff1a;3.2 常见例子&#xff1a; 4. 代码衍化过程初版&#xff1a;甲乙学生都抄试卷第二版&#xff1a;提炼代码第三版&#xff1a;抽象出算法骨架第四版&#xff1a;模板方法变化过程总…

视频转gif的几个方法

视频转gif的软件&#xff0c;视频转gif的几个方法~什么是gif图&#xff1f;其实简单一点来说就是一张会动的图片&#xff0c;gif既有图片的属性&#xff0c;也具有视频的特点&#xff0c;因为严格来说gif属于一直图片文件的特殊&#xff0c;但是它的展现方式又和视频非常的像。…

【计算机视觉 | 图像模型】常见的计算机视觉 image model(CNNs Transformers) 的介绍合集(二)

文章目录 一、SqueezeNet二、Inception-v3三、Visual Geometry Group 19 Layer CNN四、MobileNetV1五、Data-efficient Image Transformer六、MobileNetV3七、self-DIstillation with NO labels&#xff08;DINO&#xff09;八、MLP-Mixer九、WideResNet十、Darknet-19十一、HR…

普通项目(java项目)使用lombok报错

java: JPS incremental annotation processing is disabled. Compilation results on partial recompilation may be inaccurate. Use build process "jps.track.ap.dependencies" VM flag to enable/disable incremental annotation processing environment. 解决方…

【ROS】机器人使用Nomachine进行远程控制

官网&#xff1a;NoMachine - Free Remote Desktop for Everybody 支持的系统&#xff1a; WindowsMacLinux 树莓派其他ARM板IOSAndroid 由于网速问题&#xff0c;可以使用我下载好的&#xff1a;&#xff08;8.8.1_1&#xff09; 链接&#xff1a;https://pan.baidu.com/s/…

CSS 修改el-calendar的样式,自定义样式

需求&#xff1a;自定义elementui的日历的样式&#xff1b;给符合条件的时间展示红点。 elementui的原始样式&#xff1a; 目标样式&#xff1a; 代码实现&#xff1a; html: <el-calendar v-model"calendarValue"><template slot"dateCell" …

AI人工智能时代: 大一新生如何入手IT行业?

AI人工智能时代: 大一新生如何入手IT行业? AI人工智能时代: 大一新生如何入手IT行业?引言1. 了解IT行业的基础1.1 什么是IT&#xff1f;1.2 AI是如何改变IT行业的&#xff1f; 2. 如何选择合适的编程语言2.1 常见的编程语言有哪些&#xff1f;2.2 如何选择&#xff1f; 3. 制…

OPCEnum作用OPC常见通讯问题

目录 1 OPCEnum作用 1.1 检索server列表 1.2 检索失败原因 1.3 是否可以没有OPCEnum 2 OPC通讯常见问题 2.1 不能浏览OPCServer列表 2.2不能连接远程OPC Server 2.3 数据显示Bad 2.4 OPC通讯错误码 1 OPCEnum作用 你知道OPCEnum有什么用吗&#xff1f;看完本文你就对O…

Web安全(文件上传的漏洞)

文件上传漏洞和危害 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器上&#xff0c;当开发者没有对该文件进行合理的校验及处理的时候&#xff0c;很有可能让程序执行这个上传文件导致安全漏洞。大部分网站都会有文件上传的功能&#xff0c;例如头像、图片、视频等…

如何从Docker镜像中提取恶意文件

当发生容器安全事件时&#xff0c;需要从容器或镜像中提取恶意文件进行分析和处理。 本文主要介绍3种常见的方法&#xff1a; (1) 从运行的容器中复制文件 首先&#xff0c;需要从镜像运行启动一个容器&#xff0c;然后&#xff0c;使用docker cp命令从容器中提取文件到宿主机。…

Flutter——启动页白屏的优化

flutter启动页白屏的优化&#xff1a;使用图片替代白屏 结构图 核心的代码如上图&#xff0c;修改两个launch_background.xml里的代码为&#xff1a; <item><bitmapandroid:gravity"center"android:src"mipmap/ic_launcher" /></item>…

如何使用极狐GitLab 支持 ISO 27001 合规

目录 组织控制 技术控制 了解更多 本文来源&#xff1a;about.gitlab.com 作者&#xff1a;Joseph Longo 译者&#xff1a;武让 极狐GitLab 高级解决方案架构师 作为一体化平台&#xff0c;通过极狐GitLab 可以很容易实现 DevSecOps 全生命周期管理。极狐GitLab 使开发人员能…