学习笔记:微服务-24 spring boot WebFlux初探-响应式非阻塞web框架

Spring Boot Redis客户端选型:Jedis、Lettuce、RedisTemplate与Redisson深度解析 在分布式系统和高并发应用中,缓存是提升性能、降低数据库负载的核心技术之一。Redis作为高性能的键值存储数据库,其Java客户端的选择直接关系到应用的稳定性和效率。理解不同客户端的底层原理,如Jedis的同步阻塞IO模型与Lettuce基于Netty的异步非阻塞架构,是进行技术选型的基础。这些原理决定了客户端在高并发场景下的资源利用率和吞吐量,其技术价值在于能够为系统提供可靠的数据访问层,支撑电商秒杀、实时监控等应用场景。在实际工程实践中,针对缓存穿透、击穿、雪崩等经典问题,需要结合客户端特性设计防御策略, 阅读详情

响应式、非阻塞、事件驱动型web框架是另外一种编程模式和处理思维,相关概念及入门参见了如下几篇文章:

https://blog.youkuaiyun.com/Message_lx/article/details/81075766   Springboot2.0中webflux到底优秀在哪里

https://blog.youkuaiyun.com/get_set/article/details/79480233  Spring WebFlux快速上手——响应式Spring的道法术器

https://blog.youkuaiyun.com/yanchunling1981/article/details/84768985  Spring webflux--响应式、非阻塞、事件驱型web框架

以下就借鉴上面文章的例子体验一下

1.创建一个spring starter project,注意选 Reactive Web支持

其实就是会在pom.xml中加入依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>

        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
            <scope>test</scope>
        </dependency>

2. Reactive编程方法一:基于WebMVC注解的方式,增加类HelloController

@RestController
public class HelloController {
    @GetMapping("/hello")
    public Mono<String> hello() {   // 【改】返回类型为Mono<String>
        return Mono.just("Welcome to reactive world ~");     // 【改】使用Mono.just生成响应式数据
    }
}

3.Reactive编程方法二:WebFlux的函数式开发模式

(1)增加类定义

import static org.springframework.web.reactive.function.server.ServerResponse.ok;
@Component
public class TimeHandler {
    public Mono<ServerResponse> getTime(ServerRequest serverRequest) {
        return ok().contentType(MediaType.TEXT_PLAIN).body(Mono.just("Now is " + new SimpleDateFormat("HH:mm:ss").format(new Date())), String.class);
    }
    public Mono<ServerResponse> getDate(ServerRequest serverRequest) {
        return ok().contentType(MediaType.TEXT_PLAIN).body(Mono.just("Today is " + new SimpleDateFormat("yyyy-MM-dd").format(new Date())), String.class);
    }
    public Mono<ServerResponse> sendTimePerSec(ServerRequest serverRequest) { 
        return ok().contentType(MediaType.TEXT_EVENT_STREAM).body(  
                Flux.interval(Duration.ofSeconds(1)).   // 保持连接状态,每隔1秒发送一次时间
                        map(l -> new SimpleDateFormat("HH:mm:ss").format(new Date())), 
                String.class);
    }
}

(2)增加 RouterConfig类

@Configuration
public class RouterConfig {
    @Autowired
    private TimeHandler timeHandler;

    @Bean
    public RouterFunction<ServerResponse> timerRouter() {
        return route(GET("/time"), req -> timeHandler.getTime(req))
                .andRoute(GET("/date"), timeHandler::getDate)    // 这种方式相对于上一行更加简洁
                .andRoute(GET("/times"), timeHandler::sendTimePerSec);  // 增加这一行发送流数据,不断发送时间信息 
    }
}

4.测试

好吧,踏上了webflux编程第一个台阶...

【微服务】spring webflux响应式编程使用详解 webflux使用详解 阅读详情

相关推荐

STM32 bootloader程序跳转到APP卡死在B_ENDP_ALIGN,原因:有未处理的中断。解决方法:重启系统

Bootloader和App中都用到了串口,定时器等,所以从Bootloader跳转App后未卡死。 后来写的另一个App里没有用到这几个外设,然后就是无限的卡死。 现在Bootloader中跳转App之前将已打开的外设关掉,再跳转至App就不再出现卡死。  if(((*(vu32*)(APPLICATION_ADDRESS+4))&0xFF000000)==0x08000000) {

jingzhixingyun的博客 7920

详细分析Java中的ServerHttpResponse(附Demo)

接口是Spring Framework中的ServerHttpResponse接口,用于表示服务器端的HTTP响应

码农研究僧的博客 2431

电动转向系统 TAS 传感器

靠扭杆变形测力气,用霍尔效应算角度,借 ECU 给电机发指令。它就像 EPS 系统的 "神经末梢",把驾驶员的操作意图转化成电信号,再通过电机变成实实在在的助力,让我们开车既省力又安全。下次转动方向盘时,不妨想想这个藏在转向柱里的 "小传感器"—— 正是它的精准感知,才有了每一次顺畅的转向体验。

weixin_59825476的博客 4284

再学webflux

响应式编程(reactive programming)是一种基于数据流(data stream)和变化传递(propagation of change)的声明式(declarative)的编程范式。 keywords: 异步非阻塞 数据流 流水线 算子 (计算逻辑) 声明式 :声明式比较适合基于流的处理方式 服务端技术栈 客户端技术 S...

aobidr15142的博客 85

AI自主网络攻击技术深度解析:从LLM驱动到防御体系升级

网络安全领域正经历从自动化脚本到智能自主攻击的范式转变。其核心原理在于将大型语言模型(LLM)与自动化渗透测试框架深度融合,构建具备环境感知、决策规划和自适应能力的攻击系统。这种技术的核心价值在于实现了从预设步骤到目标驱动的质变,能自主完成信息收集、漏洞利用、横向移动等复杂攻击链。在应用场景上,它不仅能极大提升高级持续性威胁(APT)的攻击效率,也对渗透测试和红队演练技术提出了新的要求。面对此类由AI驱动的自主攻击,传统的基于签名的防御体系已显不足,必须转向以行为分析和零信任为核心的整体纵深防御。本次曝光的

weixin_34254464的博客 605

海康工业相机BayerRG8转BGR8实战:手把手教你用OpenCV实现高效图像转换

本文详细解析了海康工业相机BayerRG8格式到BGR8格式的高效转换实战。针对工业视觉项目中高帧率、大分辨率场景下的性能瓶颈,文章对比了海康SDK原生方案与OpenCV多种转换方法的优劣,并提供了从基础实现到高级优化(如多线程流水线、内存管理、SIMD指令集应用)的完整代码示例与性能调优策略,帮助开发者构建稳定、高效的图像处理系统。

weixin_29237635的博客 524

Spring WebFlux:响应式编程

WebFlux提供了一个非阻塞、异步的Web框架,允许开发者构建高性能、可伸缩的 Web 应用程序,特别适合处理大量并发连接,如在微服务架构和云环境中。WebFlux是Spring Framework 5引入的一个重要组件,它代表了Spring对于响应式编程(Reactive Programming)的支持。是Spring WebFlux中用于定义请求路由的函数接口。通过实现,可以精确控制请求的匹配和处理。WebClient。

2509_93994560的博客 1035

SAP MD09 事务码中的物料需求追溯详解

物料需求追溯是指在物料需求计划中,追踪特定物料的需求来源和满足方式的过程。它帮助企业确定每个需求(如销售订单、独立需求、预留等)是由哪些供应元素(如库存、生产订单、采购订单等)来满足的。通过这种追溯,企业可以了解需求和供应之间的关系,从而优化生产和采购计划,减少库存积压,提升供应链效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1193

SpringBoot3 WebFlux 可观测最佳实践

本文介绍在响应式编程 Kotlin 中,如何在 Spring Boot 3 WebFlux 利用 Micrometer 进行链路追踪。

观测云的博客 1615

TPAMI 2024 | MO-MIX:基于深度强化学习的多目标多智能体协同决策

深度强化学习(RL)已被广泛应用于解决复杂的决策问题。在许多现实世界的场景中,任务通常有多个相互冲突的目标,并且可能需要多个智能体进行合作,这些是多目标多智能体决策问题。然而,在这个交叉领域的研究工作还相对较少。现有的方法仅限于单独的领域,并且只能处理具有单一目标的多智能体决策,或者具有单一智能体的多目标决策。在本文中,我们提出了MO-MIX来解决多目标多智能体强化学习(MOMARL)问题。我们的方法基于集中训练与分散执行(CTDE)框架。

小白学视觉 1129

【异常】OpenClaw报错 400 Total tokens of image and text exceed max message tokens. Request

OpenClaw报错400(Token超限)解决方案摘要 该报错因文本/图片总Token数超过模型限额导致,常见于多轮对话累积或单次请求过大。提供三级解决方案: 应急处理:输入"/new"指令清空会话历史,立即重置Token计数(90%问题可解决) 折中方案:保留历史对话前提下,通过精简当前输入、删除早期无关对话或拆分请求来压缩Token 专属处理:单次请求超限时,拆分长文本为2000字以内段落,或分批次上传降低分辨率图片 长期预防建议定期使用"/new"开启新会话,

奶爸的编程之路,也就一周冷个三天 1390

Spring Boot - 实用功能24 - webflux

Spring Boot - 实用功能24 - webflux

qq_43350524的博客 1084

python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法

出现该Bug的原因主要是 账号密码无法登录,但原先使用该代码测试qq或者163的时候是可以通过的!问题在于各个公司邮件所处理的代码方式不一样

码农研究僧的博客 3503

Java-24 深入浅出 Spring 全景:从起源到 Spring 6 一文打通 IoC / AOP / 发展史

Spring 是面向 Java 平台的分层 Full-Stack 轻量级开源框架,以控制反转(IoC)和面向切面编程(AOP)为核心理念,简化企业级应用开发。本文系统讲解 Spring 的发展历程:2003 年 Rod Johnson 推出雏形,2004 年 3 月发布 1.0 正式版,2006 年 Spring 2.0 引入 XML Schema 命名空间,2009 年 12 月 Spring 3.0 基于 Java 5 并引入 SpEL,2013 年 12 月 Spring 4.0 全面支持 Java

谢谢你的喜欢 我们一起无限进步 5185

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring Boot中的响应式编程入门

Spring Boot中的响应式编程入门 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在现代Web应用开发中,响应式编程越来越受到重视,它可以帮助我们构建能够高效处理异步数据流的应用程序。Spring Boot 2.0开始引入了对响应式编程的支持,通过WebFlux模块,我们可以构建...

weixin_40721940的博客 231

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring 5:Java响应式编程与协议无关架构的奠基之作

响应式编程正成为高并发Java后端的核心范式,其本质是用数据流(Flux/Mono)替代传统阻塞式请求-响应模型,依托Reactor实现单线程高吞吐。Spring 5首次将响应式内核深度融入框架主干,通过WebFlux、函数式路由、协议无关容器设计,解耦业务逻辑与传输协议,使同一Bean可无缝运行于Servlet或Netty环境。该架构显著提升I/O密集型场景(如实时推送、设备接入、多源API编排)的资源利用率与伸缩性,并为Kotlin协程、R2DBC、Spring AI等现代技术栈提供统一的非阻塞底座。本

weixin_30905981的博客 383

SpringBoot响应式编程 WebFlux入门教程

???? 作者:知识浅谈,优快云签约讲师,优快云博客专家,华为云云享专家,阿里云专家博主 ???? 擅长领域:全栈工程师、爬虫、ACM算法 ????SpringBoot响应式编程 WebFlux入门教程????????概述????快速入门????关键概念????配置细节????测试方法????总结 ????概述 Spring Boot响应式编程的核心框架之一是WebF...

weixin_42237925的博客 224

Spring cloud gateway 详解和配置使用(文章较长)

目录 spring cloud gateway 介绍 1. 网关是怎么演化来的 2. 网关的基本功能 3.关于Spring Cloud Gateway 4.Spring Cloud Gateway 功能特征 5.predicate简介 6.GatewayFilter 工厂介绍 7.集成Hystrix的断路器功能 8.请求限流 pom.xml application.ym...

荡漾 21万+

【SpringBoot篇】SpringBoot WebFlux响应式大文件流式上传下载实战(Flux<DataBuffer>低内存原理、源码解析、落地方案)

DataBuffer:WebFlux底层数据缓冲区,封装Netty ByteBuf,是响应式数据传输的最小单元,默认分片大小可配置:0-N个DataBuffer的流式序列,对应大文件的分片数据流,是大文件上传下载的核心载体背压(Backpressure):响应式核心机制,下游处理速率不足时,向上游传递限流信号,控制数据生产速率极致低内存占用:内存占用恒定,与文件大小无关,支持TB级大文件传输,彻底杜绝OOM高并发高吞吐:Netty事件驱动+非阻塞IO,单服务可支撑千级并发大文件传输,远超MVC同步架构。

荏苒夕阳的博客 459

Spring Boot 3.x + Flux + WebClient 实现大模型 SSE 调用

在AI 应用开发中,流式输出(SSE,Server-Sent Events)是一种常见的方式,特别适用于大模型的 API 调用,比如 ChatGPT, DeepSeek, GLM … 接口。SSE 允许服务器向客户端推送数据流,避免长时间阻塞请求,提高用户体验。本篇文章基于,结合和WebClient,实现大模型 SSE 调用,并支持 OpenAI 通用格式。

qq_38756964的博客 4682

【SpringCloud 2021.0.0】12、路由网关Gateway之简介 (spring-boot 2.6.3)

参考自: Spring cloud gateway 详解和配置使用 【尚学堂】SpringCloudGateway微服务网关组件完整版实战 感谢分享! 1、简介 1)网关是怎么演化来的 单体应用拆分成多个服务后,对外需要一个统一入口,解耦客户端与内部服务 2)网关的基本功能 网关核心功能是路由转发,因此不要有耗时操作在网关上处理,让请求快速转发到后端服务上 网关还能做统一的熔断、限流、认证、日志监控等 可以和服务注册中心完美的整合,如:Eureka、Consul、Nacos 3)关于Sp.

土味儿 1499

挑战大文件传输极限!基于两种技术栈的 Spring Boot 流式处理实战

对于需要传输大文件的系统而言,Spring Boot 提供了“阻塞”与“响应式”两种武器——前者成熟稳定,适合常规系统;后者轻盈高效,天生适配现代云架构与高并发负载。你可以轻松上传/下载 GB 级别的文件;内存占用控制在最小;性能瓶颈被彻底打破。

2401_85116933的博客 990

Spring Session:轻松实现集群会话共享

Spring Session 摘要 Spring Session 是一个会话管理框架,解决分布式环境下的会话共享问题。它通过将Session存储到外部共享存储(如Redis、JDBC、MongoDB等)中,实现跨服务器会话一致。 主要特点: 支持Servlet和Reactive应用 自动配置多种存储方案 通过配置选择存储类型 支持自定义表名、超时时间等 可与Spring Boot自动集成 典型应用场景是微服务架构或集群部署,通过共享会话实现用户状态在多个服务实例间的无缝切换。Spring Boot提供开箱即

m0_37607945的博客 454

Java 8到Java 17与Spring Boot升级:实战评估、分步迁移与性能优化全指南

Java作为企业级应用开发的核心语言,其版本演进不仅带来了新的语法特性,更在JVM层面实现了性能与安全性的持续优化。从Java 8到Java 17的升级,涉及模块化系统、新的垃圾收集器(如ZGC)以及Records、密封类等现代语言特性,这些改进旨在提升应用运行效率、降低内存开销并增强代码的可维护性。对于广泛采用Spring Boot框架的微服务或单体应用而言,结合Spring Boot 2.7/3.0+的升级,能够原生适配新JDK,解锁更高的开发与运维效能。本文聚焦于**依赖冲突**排查与**性能基准测试

weixin_34128839的博客 336
上一篇: 学习笔记:微服务-23 调用链路监控spring cloud zikpin+kafka+mysql
下一篇: 学习笔记:从0开始学习大数据-37.数据可视化大屏
领尚
博客等级 码龄14年 1143粉丝 271原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值