1、基于传统的结构 Demo (仅仅作为快速了解,生产环境不会用这种)

请求处理类 Controller 类

package com.yootk.webflux.handler;
import org.springframework.web.reactive.function.server.ServerRequest;
import org.springframework.web.reactive.function.server.ServerResponse;
import reactor.core.publisher.Mono;// 最基础的Reactor 实现
@Component //进行组件注册(让spring 识别并管理这个类   )
public class MessageHandler{ //这是一个WebFlux处理模块(接收请求,并处理请求)// 在 WebFlux 编程里面如果要进行响应的话会区分单个响应(单一对象)以及多个响应(集合)// Mono 只能接收单个对象 // 接收请求,并响应这个请求public Mono<ServerResponse>echoHandler(ServerRequest request){return ServerResponse.ok().header("Context-Type","text/html;charset=UTF-8"). //响应头信息body(BodyInserters.fromValue("沐言科技:www.yootk.com"));}
}

路由类 Router 类

package com.yootk.webflux.router;import com.yootk.webflux.handler.MessageHandler; // 导入Controller 类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.function.server.*;@Configuration
public class MessageRouter { //消息路由处理@Bean // 进行路由的功能注册public RouterFunctions.route(RequestPredicates.GET("/echo"). // 匹配最终的处理路由地址add(RequestPredicates.accept(MediaType.TEXT_PLAIN)// 设置了匹配的请求类型,messageHandler::echoHandler); //匹配最终的处理路由地址}}

2、SpringBoot 整合 WebFlux

  • 创建一个 VO 类 ==> Message , 这个类负责接收用户的请求数据
package com.yootk.vo;import lombok.Data;
import java.util.Date;@Data
public class Message {private String title;private Data pubdate;private String context;
}
  • 创建一个 WebFlux 专属的请求处理类
package com.yootk.webflux.handler;import com.yootk,vo.Message;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.util.List;
import java.util.Map;@Component //进行组件注册
@Slf4j //日志输出
public class MessageHandler { //这是一个WebFlux 处理模块public Flux<Message> list(Message message) { //返回集合数据List<Message> messageList = new ArrayList<>(); //创建一个List 集合for (int x = 0;x<10;i++){ //10个长度的集合Message msg = new Message(); //创建新的Message 实例msg.setTitle("["+x+"]" + message.getTitle());msg.setContent("["+x+"]" + message.getContent());msg.setPubdate(message.getPubdate());// 直接使用已经配置的日期时间messageList.add(msg); //实现集合的存储}return Flux.fromIterable(messageList);// 实现了集合响应}// 每一次进行响应结果配置的时候,都只能够配置具体的类型public Flux<Map.Entry<String,Message>>map(Message message){Map<String,Message> map = new HashMap<>();for (int i = 0;i<10;i++) { // 通过迭代配置数据Message msg = new Message(); // 创建新的Message 实例msg.setTitle("["+ i + "]" + message.getTitle());msg.setContent("[" +i + "]" + message.getContent());msg.setPubdate(message.getPubdate());// 直接使用已经配置的日期时间map.put("yootk---" + i,msg); // 保存Map 集合}return Flux.fromIterable(map.entrySet());}//此时不再关注传统的ServerResponse以及ServletRequest类型了// Mono 只能处理单个对象public Mono<Message>echoHandler(Message message){ //直接以最终的数据类型进行操作log.info("{} 业务层接收处理数据:{}",Thread.currentThread().getName(),message);message.setTitle("["+Thread.currentThread.getName()+"]"+message.getTitle());message.setContent("["+Thread.currentThred().getName()+"]"+message.getContent());return Mono.create(monoSink->monoSink.success(message));// 实现数据响应}
}
  • SpringBoot 之中所有的请求需要通过Action类(或者Controller) 进行访问,那么最佳的路由配置就是由Action类(或者Controller)进行处理了
package com.yootk.action;impo.rt com.yootk.vo.Message;
import com.yootk.webflux.handler.MessageHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.bean.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequstMapping("/message/*")
@Slf4j
public class MessageAction{ //正常访问的路由配置@Autowiredprivate MessgeHandler messageHandler; // WebFlux 处理程序@RequestMapping("echo")public Object echo(Message message){log.info("接收用户信息,用户发送的参数为: message = {}",message);return this.messageHandler.echoHandler(message);}// 请求url  localhost:8080/message/list?title=沐言科技&content=www.yootk.com&pubdate=2025-10-01@RequestMapping("list")public Object list(Message message) {log.info ("接收用户根信息,用户发送的参数为: message = {}",message);return this.messageHandler.list(message);}// 请求url  localhost:8080/message/map?title=沐言科技&content=www.yootk.com&pubdate=2025-10-01@RequestMapping("map")public Object map(Message message){log.info ("接收用户根信息,用户发送的参数为: message = {}",message);return this.messageHandler.map(message);}
}
  • 使用 Flux 包装需要返回的集合数据信息(List集合、Map集合)
    (Flux 能包装集合数据)

Spring web-flux 响应式编程相关推荐

  1. Kotlin 使用 Spring WebFlux 实现响应式编程

    Kotlin 使用 Spring WebFlux 实现响应式编程 IBM的研究称,整个人类文明所获得的全部数据中,有90%是过去两年内产生的.在此背景下,包括NoSQL,Hadoop, Spark, ...

  2. Spring BOOT ( 基于Kotlin 编程语言) 使用 Spring WebFlux 实现响应式编程

    Spring BOOT ( 基于Kotlin 编程语言) 使用 Spring WebFlux 实现响应式编程 image.png 参考文档:https://docs.spring.io/spring/ ...

  3. Spring:Webflux响应式编程

    目录 简介 响应式编程 Reactor 信号 操作符 SpringWebflux 执行流程和API 注解实现SpringWebflux 说明:基于atguigu学习笔记. 简介 Webflux是 Sp ...

  4. 浅谈Spring5 响应式编程

    目录 为什么是响应式编程 用于响应式编程实现的理想案例 响应流 (Reactive Streams) Spring 5 提供的响应式编程 Spring Web Reactive vs. Spring ...

  5. 【Spring 5】响应式Web框架实战(下)

    - [Spring 5]响应式Web框架前瞻  - 响应式编程总览  - [Spring 5]响应式Web框架实战(上) 1 回顾 上篇介绍了如何使用Spring MVC注解实现一个响应式Web应用( ...

  6. Spring笔记(4):响应式编程、Reactor、WebFlux、Flow

    目录 1.Spring Webflux 介绍 2.响应式编程(Java 实现) 3.响应式编程(Reactor 实现) 4.SpringWebflux 执行流程和核心 API 5.SpringWebf ...

  7. 【Spring 5】响应式Web框架实战(上)

    前情概要:  - [Spring 5]响应式Web框架前瞻  - 响应式编程总览 1 回顾 通过前两篇的介绍,相信你对响应式编程和Spring 5已经有了一个初步的了解.下面我将以一个简单的Sprin ...

  8. 【Spring 5】响应式Web框架前瞻

    1 响应式宣言 和敏捷宣言一样,说起响应式编程,必先提到响应式宣言. We want systems that are Responsive, Resilient, Elastic and Messa ...

  9. springboot异步注解_Spring Boot 2 :Spring Boot 中的响应式编程和 WebFlux 入门

    [小宅按]Spring 5.0 中发布了重量级组件 Webflux,拉起了响应式编程的规模使用序幕. WebFlux 使用的场景是异步非阻塞的,使用 Webflux 作为系统解决方案,在大多数场景下可 ...

  10. Spring WebFlux 响应式编程学习笔记(一)

    各位Javaer们,大家都在用SpringMVC吧?当我们不亦乐乎的用着SpringMVC框架的时候,Spring5.x又悄(da)无(zhang)声(qi)息(gu)的推出了Spring WebFl ...

最新文章

  1. Xilinx FIR IP core滤波器系数的重载方法
  2. idea从mapper接口跳到xml文件
  3. 《精通Windows API-函数、接口、编程实例》——第4章文件系统
  4. DSP学习-- UTC转UNIX时间戳
  5. css 浮动在最上层_CSS的“层”峦“叠”翠
  6. json schema如何约束为小数_如何使用jsonschema进行接口响应断言
  7. 从偶然的机会发现一个mysql特性到wooyun waf绕过题
  8. 为什么使用GB28181而不是直接rtsp拉流
  9. mysql关闭12260端口_windows 如何查看端口占用情况?
  10. 【干货】如何获得知乎推荐,快速涨粉?(附64页ppt下载链接)
  11. 德鲁伊 oltp oltp_内存中OLTP系列–简介
  12. Vuex的官方文档笔记
  13. jquery开发手册(详细全面)
  14. AMOS分析技术:路径分析;用SPSS做路径分析麻烦?那就用AMOS分析吧
  15. java 多语言_JAVA实现多语言
  16. 金蝶BOS自定义元数据
  17. 高德地图大头针功能_iOS高德地图之自定义大头针and泡泡view
  18. 爬虫入门实战第一站——梨视频视频爬取
  19. 2018/12/19 oracle-sql练习
  20. 基于 PYNQ 的 AXI 总线主从控制编写(ddr3的读写)

热门文章

  1. 数据库视频sql server概述
  2. linux下dns配置方法与常用dns
  3. Linux怎么看内存是不是ecc,什么是ECC内存?怎么区分内存是不是ECC?
  4. html表格在网页底部,用表格制作网页
  5. vim 如何跳转到函数定义
  6. 从ABCDEF六个队员中挑选人参加任务
  7. 2073 买票需要的时间
  8. 【ARM攒机指南——AI篇】5大千万级设备市场技术拆解
  9. linux截图,像qq截图一样好用的截图工具deepin-scrot
  10. Excel按单元格背景颜色查找单个单元格的2种操作