基于JDK9的SubmissionPublisher设计实践及源码剖析

什么是响应式编程

总的来说,Reactive Programming 就是编写关于如何响应事件的编程模式,这些事件包括:用户输入,数据流,系统状态,变量的变化等等。 总结一下,响应式编程通常会用在一个事件流相关的场景中,在一个事件流中,一旦触发第一个事件,后续的事件会被依次触发,就像一个Pipeline 系统,不断有输入和输出。

如何使用java进行响应式编程

使用jdk9的SubmissionPublisher

SubmissionPublisher如何使用

官网介绍:
*SubmissionPublisher是一个流。异步提交问题的发布者
*(非空)项,直到关闭为止。每一个
*当前订阅者按相同顺序接收新提交的项目
*除非遇到drop或异常。使用一个
SubmissionPublisher允许项目生成器作为兼容的<a
*href = "http://www.reactive-streams.org/">reactive-streams </>
*发布者依赖于drop处理和/或阻塞流
*控制。
 * A {
   @link Flow.Publisher} that asynchronously issues submitted
 * (non-null) items to current subscribers until it is closed.  Each
 * current subscriber receives newly submitted items in the same order
 * unless drops or exceptions are encountered.  Using a
 * SubmissionPublisher allows item generators to act as compliant <a
 * href="http://www.reactive-streams.org/"> reactive-streams</a>
 * Publishers relying on drop handling and/or blocking for flow
 * control.

定义发布者

SubmissionPublisher<String> publisher =new SubmissionPublisher<>();

泛型为消息类型,可以使用任意类型

Recover 订阅者,用来接受事件

订阅者Subscriber Subscriber订阅Publisher的回调。
除非有请求,数据项目是不会被推送到订阅者,但可能会请求多个项目。
对于给定订阅(Subscription),调用Subscriber的方法是严格按顺序的。 应用程序可以响应订阅者上的以下回调。
1.onSubscribe 
对于给定的订阅,在调用任何其他Subcriber方法之前调用此方法。
2.onError
在Publisher或Subcriber遇到不可恢复的错误时调用此方法,之后Subscription不会再调用Subscriber其他的方法。
如果Publisher遇到不允许将项目发送给Subscriber的错误,则Subscriber会收到onError消息,然后不会再收到其他消息。
3. onNext
订阅下一个项目调用此方法
3.onComplete
当已知不会再额外调用Subscriber的方法,且没有发生有错误而导致终止订阅,调用此方法。之后Subscription不会调用其它Subscriber的方法。
当知道没有更多的消息发送给它时,订阅者收到onComplete。

订阅者实现

class Recover implements Flow.Subscriber<String> {
   

    @Override
    public void onSubscribe(Flow.Subscription subscription) {
   
        System.out.println("has message on");
    }

    @Override
    public void 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值