Spring Flux方法总结

Flux 的方法非常多(几百个),但你不需要全部记住。我们可以把它们按照"功能"分成几类,就像厨房里不同的工具:

1. 制造水源(创建操作符)

用来定义流量的来源。

  • just(T... data) :最直接的,把现成的数据塞进去。
  • fromIterable(Iterable) :把 ListSet 变成 Flux
  • range(int start, int count) :生成一个整数序列(如 1 到 100)。
  • interval(Duration)定时器。每隔一段时间发一个数字(0, 1, 2...),常用于心跳检测。
  • empty() :直接发送完成信号,水管里啥也没有。
  • error(Throwable) :直接发送错误信号,水管一通就爆。

2. 加工转换(转化操作符)

最常用的部分,用来改变流里的数据。

  • map(Function)1对1转换 。把 A 变成 B(如:把"洗洁精"字符串变成 Soap 对象)。

  • flatMap(Function)1对N转换(异步) 。把一个元素变成一个新的 Flux

    比喻:map 是把菜切碎;flatMap 是把一个订单拆成多个物流单,并异步去查每一个物流。

  • buffer(int n)打包 。把零散的水滴收集满 n 个,凑成一个 List 再往下流。

  • collectList() :把水管里所有的水都接住,最后装进一个 Mono<List<T>>


3. 过滤与挑选(过滤操作符)

决定哪些东西能流过去。

  • filter(Predicate) :符合条件的才让过。
  • distinct()去重。流过的东西如果重复,只放行第一个。
  • take(long n)只取前 n 个。拿完就关水龙头。
  • skip(long n) :跳过前 n 个,从后面开始接。

4. 组合流(组合操作符)

把多根水管拼在一起。

  • mergeWith(Publisher)合并。两根管子汇成一根,谁有水谁先流(交错输出)。

  • zipWith(Publisher)配对。左边流出一滴,右边流出一滴,凑成一对(Tuple)再往下走。

    比喻:merge 是合流,zip 是相亲,必须两边都有人才成对。

  • concatWith(Publisher)首尾相接。等第一根管子流完了,才开始流第二根。


5. 副作用与生命周期(监听操作符)

只观察,不干预。

  • doOnNext(Consumer) :数据流过时看一眼(打日志)。
  • doOnError(Consumer) :出故障时看一眼。
  • doOnComplete(Runnable) :流完时看一眼。
  • doFinally(Consumer) :管它成功还是失败,最后都要执行(类似 finally 块)。

6. 错误处理(容错操作符)

水管爆了之后的救场方案。

  • onErrorReturn(T) :出错了?别报警,直接返回一个默认值。
  • onErrorResume(Function) :出错了?切到备用水管(另一个 Flux)。
  • retry(long n) :出错了?再试 n 次。

总结

  • 如果你要改变 数据:找 map/flatMap
  • 如果你要减少 数据:找 filter/take
  • 如果你要合并 数据:找 zip/merge
  • 如果你要观察 数据:找 doOn... 系列。
相关推荐
逝水无殇1 小时前
C# 异常处理详解
开发语言·后端·c#
考虑考虑4 小时前
Sentinel安装
java·后端·微服务
IT_陈寒4 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端
碎碎念_4924 小时前
SpringBoot + Vue 前后端分离从 0 到 1 完整环境配置流程
vue.js·spring boot·后端
逝水无殇4 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#
YIAN5 小时前
从手写 Agent 工具到 MCP 协议:一文搞懂大模型跨进程跨语言工具调用
后端·agent·mcp
小兔崽子去哪了5 小时前
Docker 删除镜像后磁盘空间没有释放?
后端·docker·容器
高明珠5 小时前
麒麟 V10 SP1 排查实录:ttyS5 每 10 秒莫名收到一批报文,元凶是 eGTouchD
后端
卷无止境5 小时前
Python FFI 技术深度解析:ctypes、cffi 与 pybind11 的性能差异与实践挑战
后端·python
ServBay6 小时前
AI Gateway 是什么?为什么每个平台都在做
后端·aigc·ai编程