package com.example.demo21;
import org.junit.jupiter.api.Test;
import org.reactivestreams.Subscriber;
import org.reactivestreams.Subscription;
import org.springframework.boot.test.context.SpringBootTest;
import reactor.core.publisher.Flux;
@SpringBootTest
class Demo21ApplicationTests {
//public abstract class Flux<T> implements CorePublisher<T> => interface CorePublisher<T> extends Publisher<T>
// Reactive streams 规范
//发布接口 Publisher 里面提供订阅接口 subscribe(CoreSubscriber<? super Subscriber> var1);方法
//订阅接口
//public interface Subscriber<T> {
// 订阅成功
// void onSubscribe(Subscription var1);
//
// void onNext(T var1);
//
// void onError(Throwable var1);
//
// void onComplete();
//}
//public interface Subscription {
// void request(long var1);
//
// void cancel();
//}
//Flux和mono 都是实现 Publisher 接口
@Test
void contextLoads() {
//Flux 类似NIO中 ServeSocketChannel 监听收集链接
//Subscriber
Flux.just("a", "b", "c").subscribe(new Subscriber<String>() {
Subscription subscription;
@Override
public void onSubscribe(Subscription s) { //Subscription 类似NIO SelectionKey 令牌
System.out.println("onSubscribe");
this.subscription = s;
subscription.request(2); // 发起请求指令 类似NIO 给SelectionKey设置状态
System.out.println("onSubscribe-end");
}
@Override
public void onNext(String s) {
System.out.println("onNext");
System.out.println(s); // 响应
System.out.println("onNext-request-start");
// subscription.request(1); // 再请求1个
System.out.println("onNext-request-end");
}
@Override
public void onError(Throwable t) {
System.out.println("onError");
t.printStackTrace();
}
@Override
public void onComplete() {
System.out.println("onComplete");// 完成
}
});
}
}
Reactive streams 规范
于 2023-11-17 16:23:02 首次发布