Spring响应式编程之Reactor核心接口

响应式流的核心接口

核心接口包括:Publisher<T>、Subscriber<T>、Subscription 和 Processo<T,R>

(1)Publisher<T>

Publisher接口代表数据流的生产者,根据收到的请求向Subscriber发布数据。接口定义如下:

java 复制代码
public interface Publisher<T> {
    void subscribe(Subscriber<? super T> s);
}

(2)Subscriber<T>

Subscriber代表数据流的消费者,负责订阅并接收Publisher发布的数据。接口定义如下:

java 复制代码
public interface Subscriber<T> {
    void onSubscribe(Subscription s);
    void onNext(T t);
    void onError(Throwable t);
    void onComplete();
}
  • onSubscribe():回调方法,当发布者的 subscribe() 方法被调用时就会触发这个回调。而在该方法中有一个参数 Subscription():可以把这个 Subscription 看作是一种用于订阅的上下文对象。Subscription 对象中包含了这次回调中订阅者想要向发布者请求的数据个数。
  • onNext():当订阅关系已经建立,那么发布者就可以调用订阅者的 onNext() 方法向订阅者发送一个数据。这个过程是持续不断的,直到所发送的数据已经达到 Subscription 对象中所请求的数据个数。
  • onComplete():当所发送的数据已经达到 Subscription 对象中所请求的数据个数,触发onComplete() 方法,代表这个数据流已经全部发送结束。
  • onError():在发送数据过程中若出现异常,就会触发 onError() 方法,我们可以通过这个方法捕获到具体的异常信息进行处理,而数据流也就自动终止。

(3)Subscription

Subscription代表一种订阅上下文对象,用于管理Publisher和Subscriber之间的订阅关系。Subscription是确保发布者和订阅者针对数据处理速度达成一种动态平衡的基础,也是流量控制中实现背压机制的关键。接口定义如下:

java 复制代码
public interface Subscription {
    void request(long n);
    void cancel();
}
  • request():请求发布者发送n个数据项,订阅者可以通过不断调用该方法来向发布者请求数据。
  • cance():取消订阅,停止接收数据。

(4)Processo<T,R>

Processo<T,R>接口既可以是Publisher也可以是Subscriber,用于对数据流进行处理和转换。接口定义如下:

java 复制代码
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}

Processo<T,R>接口方法详见:Spring响应式编程之Reactor操作符


其他相关内容参考:
Spring响应式编程之Reactor介绍
Spring响应式编程之Reactor背压机制
Spring响应式编程之Reactor核心组件
Spring响应式编程之Reactor操作符

相关推荐
小溪学编程1 分钟前
Spring @Bean 与 @Component 注解的区别详解
java·后端·spring
IT_陈寒24 分钟前
Python的列表推导式用不好真的会爆内存你知道吗
前端·人工智能·后端
Wang's Blog27 分钟前
Java 项目实战: 交友项目 - 圈子互动章总结与自检清单
java·bootstrap·交友
xyouyuweizhu1 小时前
字节流与字符流:Java IO 的两条主线该怎么选
java·开发语言·python
代码方舟1 小时前
零信任架构实战:基于天远人企关联构建自动化供应链核心企业关联穿透与利益冲突审查网关
java·人工智能·架构·自动化
摸爬滚打的小李2 小时前
TomCat
后端
liyi_hz20082 小时前
O2OA(翱途) V10.1 即将发布|功能再升级,安全再加固,协同更高效!
java·javascript·windows·开源软件
骑着蜗牛撵大象3272 小时前
AI Agent 工程化开发实战(三):用 StateGraph 给智能体搭一条可回放的状态流水线
java·开发语言·jvm·ai·状态管理·langgraph·stategraph
itmigrate2 小时前
Rust 里的所有权误区:不是不写 clone 就叫高性能
开发语言·后端·rust
Brilliantwxx2 小时前
【Linux】 文件访问与路径解析:目录、文件名、dentry、路径缓冲与 dcache 全解析
linux·运维·服务器·开发语言·spring