当前位置: 首页 > news >正文

Java响应式编程

Java 响应式编程是一种基于异步数据流处理的编程范式,它强调数据流的声明式构建和传播变化的自动响应。Java 9 引入的Flow API为响应式编程提供了标准接口,而 Reactor 和 RxJava 等第三方库则提供了更丰富的操作符和工具。

核心概念

  1. Publisher(发布者):产生数据流的源头。
  2. Subscriber(订阅者):消费数据流的接收者。
  3. Subscription(订阅):连接发布者和订阅者的桥梁,管理背压(Backpressure)。
  4. Processor(处理者):兼具发布者和订阅者的功能,用于转换数据流。

简单示例:使用 Java Flow API

下面是一个使用 Java 标准库Flow API的简单响应式编程示例:

import java.util.concurrent.Flow;
import java.util.concurrent.SubmissionPublisher;public class ReactiveExample {public static void main(String[] args) throws InterruptedException {// 创建发布者try (SubmissionPublisher<String> publisher = new SubmissionPublisher<>()) {// 创建订阅者Flow.Subscriber<String> subscriber = new Flow.Subscriber<>() {private Flow.Subscription subscription;@Overridepublic void onSubscribe(Flow.Subscription subscription) {System.out.println("订阅成功");this.subscription = subscription;subscription.request(1); // 请求1个数据}@Overridepublic void onNext(String item) {System.out.println("接收到数据: " + item);subscription.request(1); // 处理完后再请求1个}@Overridepublic void onError(Throwable throwable) {System.out.println("发生错误: " + throwable.getMessage());}@Overridepublic void onComplete() {System.out.println("数据流处理完成");}};// 订阅publisher.subscribe(subscriber);// 发布数据publisher.submit("Hello");publisher.submit("Reactive");publisher.submit("World");// 等待所有数据处理完成Thread.sleep(1000);}}
}

常用操作符(以 Reactor 库为例)

Reactor 是 Spring 生态中推荐的响应式编程库,提供了Mono(0-1 个元素)和Flux(0-N 个元素)两种核心类型:

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;public class ReactorExample {public static void main(String[] args) {// 创建FluxFlux<String> flux = Flux.just("A", "B", "C").map(String::toLowerCase)  // 转换操作.filter(s -> s.startsWith("a"));  // 过滤操作// 创建MonoMono<String> mono = Mono.just("Hello").flatMap(s -> Mono.just(s + " World"));  // 异步转换// 订阅并消费flux.subscribe(System.out::println,  // 正常数据处理Throwable::printStackTrace,  // 错误处理() -> System.out.println("Flux完成")  // 完成回调);mono.subscribe(System.out::println);}
}

背压(Backpressure)处理

响应式编程的重要特性是支持背压,即消费者可以控制生产者发送数据的速率:

Flux.range(1, 1000)  // 生成1到1000的整数.onBackpressureBuffer(100)  // 缓冲100个元素.subscribe(num -> {// 模拟慢速处理try { Thread.sleep(100); } catch (InterruptedException e) {}System.out.println(num);},Throwable::printStackTrace,() -> System.out.println("处理完成"));

响应式 Web 示例(Spring WebFlux)

Spring WebFlux 是基于 Reactor 的响应式 Web 框架:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;@SpringBootApplication
public class WebFluxExample {public static void main(String[] args) {SpringApplication.run(WebFluxExample.class, args);}
}@RestController
class HelloController {@GetMapping("/hello")public Mono<String> hello() {return Mono.just("Hello, Reactive Web!");}
}

总结

Java 响应式编程通过异步数据流提供了高效处理大量并发请求的能力,适合构建非阻塞、低延迟的应用程序。主要应用场景包括微服务、实时数据处理和高并发系统。

http://www.lryc.cn/news/603080.html

相关文章:

  • ATF 运行时服务
  • ros2的package.xml和rosdep
  • 基于深度学习的医学图像分析:使用3D CNN实现肿瘤检测
  • 第十天:字符菱形
  • 一个Pycharm窗口添加多个项目来满足运行多个项目的需求
  • DDoS攻击防御:从5G到T级防护方案全对比
  • 企业级日志分析系统ELK
  • Python动态规划:从基础到高阶优化的全面指南(3)
  • 历史版本的vscode下载地址
  • 实验-静态路由
  • 智慧工地系统:科技赋能建筑新未来
  • 学习dify:一个开源的 LLM 应用开发平台
  • 【GitHub Workflows 基础(二)】深入理解 on、jobs、steps 的核心语法与执行逻辑
  • 【2025/07/28】GitHub 今日热门项目
  • 【iOS】类和分类的加载过程
  • LNMP架构+wordpress实现动静分离
  • Cacti RCE漏洞复现
  • 四、计算机组成原理——第1章:计算机系统概述
  • 可扩展架构模式——微服务架构最佳实践应该如何去做(方法篇)
  • 《汇编语言:基于X86处理器》第10章 结构和宏(2)
  • linux命令grep的实际应用
  • 在虚拟机ubuntu上修改framebuffer桌面不能显示图像
  • 1.vue体验
  • Android 媒体播放开发完全指南
  • Ansible提权sudo后执行报错
  • 电脑开机不显示网卡的原因
  • selenium 特殊场景处理
  • 刘润探展科大讯飞WAIC,讯飞医疗AI该咋看?
  • CSP-J 2022_第三题逻辑表达式
  • 技术工具箱 |五、一个避免头文件重复引用的 Python 脚本