了解Reactive Streams的规范

前言

        Reactive Streams 是一种用于异步流处理的规范,旨在提供一种标准化的方式来处理数据流,特别是当数据流的速度和数量不可预测时。它定义了一组接口和规则,以确保生产者和消费者之间的交互是高效且可控制的。

Reactive Streams规范(特点)

  • 背压 (Backpressure): 消费者可以控制从生产者接收数据的速度,防止生产者发送过快导致消费者无法处理。(按量消费)建立一个数据缓冲区,我能消费多少我拿多少。
  • 非阻塞 (Non-blocking): 处理数据时不会阻塞线程,提高系统的响应性和吞吐量。
  • 异步 (Asynchronous): 数据流的处理是全异步的,适合高并发场景。
  • 解耦 (Decoupling): 生产者和消费者之间通过接口解耦,提高系统的灵活性和可维护性。

数据管道

  1. Publisher:发布者,负责产生数据流。

  2. Subscriber:订阅者,负责消费数据流。

  3. Subscription:订阅关系,连接 Publisher 和 Subscriber的对象,用于控制数据流的速度。

  4. Processor:处理器,既是 Subscriber 又是 Publisher,可以对数据流进行中间处理。

java.util.concurrent.Flow;包路径,引用接口调用
publisher发布的所有数据存在了它的buffer区

public class SimpleReactiveStreamsExample {

    public static void main(String[] args) {
        // 创建一个 Publisher
        Publisher<Integer> publisher = new Publisher<Integer>() {
            @Override
            public void subscribe(Subscriber<? super Integer> subscriber) {
                subscriber.onSubscribe(new Subscription() {
                    @Override
                    public void request(long n) {
                        for (int i = 0; i < n; i++) {
                            subscriber.onNext(i);
                        }
                        subscriber.onComplete();
                    }

                    @Override
                    public void cancel() {
                        // 取消订阅
                    }
                });
            }
        };

        // 创建一个 Subscriber
        Subscriber<Integer> subscriber = new Subscriber<Integer>() {
            private Subscription subscription;

            @Override //在订阅时   在某事件发生时,执行这个回调
            public void onSubscribe(Subscription subscription) {
                this.subscription = subscription;
                // 请求 5 个数据项,相当于建立管道,刚建立完找上游要数据 第一次发五个数据
                subscription.request(5);
            }

            @Override //在下一个元素到达时  执行这个回调 接受都新数据
            public void onNext(Integer item) {
                System.out.println("Received: " + item);
                // 在消耗第一次五个数据后 在此请求 5 个数据项
                subscription.request(5);
            }

            @Override //在错误发生时
            public void onError(Throwable throwable) {
                System.err.println("Error: " + throwable.getMessage());
            }

            @Override //在完成时	
            public void onComplete() {
                System.out.println("Completed");
            }
        };

        // 订阅
        publisher.subscribe(subscriber);
    }
}

响应式编程是什么

        1、底层:基于数据缓冲队列+消息驱动模型+异步回调机制。

        2、编码:流式编程+链式调用+声明式API。

        3、效果:优雅全异步+消息实时处理+高吞吐量 +占用少量资源。

响应式的核心:消息传递

        整个消息的传递靠消息队列,需要保证实时性的消息传递。

        响应式流就是利用消息驱动,最终构成一个弹性的和回弹性的,实现一个及时响应性。

解决痛点

使高并发三宝:【缓存、异步、队排好】,无需手动控制,现全都自动控制。

总结

Reactive Streams 提供了一种强大的机制来处理异步数据流,特别适用于高并发和实时数据处理的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值