reactor flux

蹲街弑〆低调 提交于 2020-03-27 10:54:03

3 月,跳不动了?>>>

发布订阅模式

A--->B-->C---->D
subscribe: D--->C--->B--->A
onSubscribe: A--->B--->C---->D
request: D---->C--->B---->A
onNext: A--->B-->-C--->D
complete:A--->B---->C--->D

Flux.just

 Flux<String> fs = Flux.just("1","2");

Flux.fromArray

 Flux<String> fs = Flux.fromArray(new String[]{"1","2"});

Flux.fromIterable

Flux<String> fs = Flux.fromIterable(Arrays.asList("1","2"));

Flux.generate

s.complete 只能调用一次,要不然会报错 一般用于同步

Flux<String> fs = Flux.generate(()->Integer.valueOf(1),(i,s)->{

            s.next(i+"");
            if(i == 10){
                s.complete();
            }
            return ++i;
        });
        fs.subscribe(s->System.out.println(s));

Flux.publishOn

异步发布

Flux<String> f1 = Flux.just("1","2","3","4","5");
        f1.doOnNext(s->{
            System.out.println(Thread.currentThread().getName());
        })
                .publishOn(Schedulers.newSingle("single1"),2).
        doOnNext(s->{
            System.out.println(Thread.currentThread().getName()+"_"+s);
        })
                .subscribe(
                       s->{
                           System.out.println(Thread.currentThread().getName());
                       } );

运行结果

main
main
single1-1_1
single1-1
single1-1_2
single1-1
single1-1
single1-1
single1-1_3
single1-1
single1-1_4
single1-1
single1-1
single1-1_5
single1-1

Flux.subscribeOn

异步订阅:
与publishOn的区别:
publishOn 作用于onNext,onCompelet
subscribeOn作用于 subscribe

 Flux<String> f1 = Flux.just("1","2","3","4","5");
        f1.doOnNext(s->{
            System.out.println(Thread.currentThread().getName());
        })
                .subscribeOn(Schedulers.newSingle("single1"),true).
        doOnNext(s->{
            System.out.println(Thread.currentThread().getName()+"_"+s);
        }) .subscribeOn(Schedulers.newSingle("single2"),true).
                doOnNext(s->{
                    System.out.println(Thread.currentThread().getName()+"_"+s);
                })
                .subscribe(
                       s->{
                           System.out.println(Thread.currentThread().getName());
                       } );

结果

single1-2
single1-2_1
single1-2_1
single1-2
single1-2
single1-2_2
single1-2_2
single1-2
single1-2
single1-2_3
single1-2_3
single1-2
single1-2
single1-2_4
single1-2_4
single1-2
single1-2
single1-2_5
single1-2_5
single1-2

Flux.create

支持背压 用于异步


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!