发布订阅模式
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
支持背压 用于异步
来源:oschina
链接:https://my.oschina.net/u/3217171/blog/3212281