rxjava(rxjava线程池)

本篇文章给大家谈谈rxjava,以及rxjava线程池对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

springboot适合用rxjava么

适合,RxJava是一数早迹个基于响应式编程模型的函数库,可以帮助开发人员处理异步数据流和基于事件的编程。它可以在Spring Boot应用程序中进行依赖睁大注薯并入,直接用于新的或现有的项目中,改善程序的性能和效率。

[img]

RxJava在服务端是否有使用场景和优势

1.Hystrix使用RxJava简洁的仿念window API来构空孝建metric应该算是一种不错的后端使用场景,说实话, RxJava虽然很酷, 但服务端使用RxJava的优势真心很少.

2.主要的原因还是大多数的Java服务端还是以同步逻辑为主, 迁移成本太高了.RxJava的响应式优势只有在异步逻辑占主导时才会体现出来. 异步和同步的夹杂使用, 还不如整体使用NodeJS的异步处理协调.其次, RxJava一大堆的数据处理API对习惯了同步逻辑的程序员来说, 学习成本也是相当高的.再加上后端的类库大多都是同步的API, 兼容RxJava的API的类库寥寥无几.所以基于RxJava的后端类库也是少之又少.

2.目前后端基于RxJava构建的最著名的类库是Hystrix, 它提供的API也是通过Command模式来作为同步的方式来调用.外部调用者无需关心内部的RxJava实现. 这样做应该也是为了降低使用者学习成本吧.

兼容RxJava API的rxjava-jdbc, 虽然使用起来代码会简洁不少, 但现在的备亏困项目已经很少直接使用jdbc了, 也是英雄无用武之地.

如果想在后端使用响应式编程的话. 不妨看看vertx, 它基本用自己的响应式打通了后端的各个环节, 它规划的技术栈还是很全面,基本上覆盖到后端开发的功能.

Retrofit2.0+RxJava网络请求异常统一处理

本文内容是基于RxJava 2.0及Retrofit 2.1分析的。参考了 Rxjava +Retrofit 你需要掌握的几个技巧,Retrofit缓存,统一对有无网络处理, 异常处理,返回结果问题

下面列出具体添加的依赖。

以下这些错误,都是在网络请求中经常见的。我们可以通过Toast弹出消息通知用户具体的异常以及加载对应的UI界面。除此之外,通过具体的异常信息,方便我们及时的排查项目中的BUG。

那么问题就来了,我们如何判断异常的类型?

这就要从服务器返回的数据格式说起了。

我们一般请求的返回都是像下面这样

服务器端返回数据约定俗称就是大概以上的格式。可能具体的code码表示的含义不一样,这个可以与服务器端人员交流,灵活变化。

关于Retrofit的基本配置就不再讲述了,这里具体讲解如何对服务器返回数据封装以及使用RxJava对错误信息处理。

封装返回数据

对于上述的服务器返回数据我们要简虚芹对code做出一些判断,code不为200(假设200表示请求网络成功)就抛出异常。所以我们新建一个BaseResponse类,对应上面的数据结构。

这算是拦毕所有实体的一个基类,data可以为任何数据类型。

然后要对返回结果进行预处理,新建一个ExceptionHandle。预处理无非就是当根据返回数据BaseResponse的isOk()方法判断为是否为true,若为true则正常处理,否则抛出异常让ExceptionHandle进一步处理,判断异常为何种异常。我们先跳过前面的逻辑,先了解如何判断是何种异常?

判断异常类型

详细可看源码,下面会贴出地址。

通过ExceptionHandle.handleException(Throwable e) 即可返回一个异常,并携带具体异常类型信息。

现在我们已经知道了如何判断是否产生以上以及如何判断异常类型。接下来需要解决地就是如何把异常传递给Observer的onError(Throwable e)去处理异常。

在进行异常传递的过程中,第一步我们先要判断服务器返回的数据是否是异常,如果不是异常则返回data数据,如果是异常则抛出异常。这个时候就包含了一个数据转换的过程即把BaseResponse对象转换成data类型的对象,所以需要map()操作符。

其中HandleFuc实现了 FunctionBaseResponseT, T 接口

如果不出现异常则不会走第二步。如果出现异常,则需要进行第二步,即对异常进行判断,然后将ExceptionHandle.handleException(Throwable e) 返回的异常传入onError()中处理。

重点来了:当产生异常时,应该终止对onNext()方法的调用并调用onError()方法。如果不继续处理,仅通过以上步骤,虽然会调用onError()方法,但是没有对异常进行判断,并且没有取消onNext()方法。那么有没有一个好的方法,可以即取消onNext()方法,又能在其中实现异常判断的执行,并且会调用onError()方法?

如此强大的RxJava自然有这样的方法了, onErrorResumeNext() 就能实现这个要求。对于 onErrorResumeNext() ,可以简单理解为:当发生错误的时候,由另外一个Observable来代替当前的Observable并继续发射数据。

onErrorResumeNext() 中传入的参数可以是一个Function接口。这样,我们可以在Function中生成一个Observable,该Observable执行异常判断的逻辑,并调用onError()方法。

具体实现如下:

至此,我们便实现了异常判断与传递的逻辑。这样我们就可以在onError()方法中提取具体的异常状态信息,进行相应的誉码处理。

大概流程是:map()进行数据类型转换,并检测异常。如果正常,返回data类型的数据。如果不正常,onErrorResumeNext()判断异常类型并传递异常

上述情况关闭了网络。当发起网络请求,没有网络则抛出异常,然后检测出具体异常,Toast提示异常类型,用户便知道是什么地方出错了。

demo参考地址:

RxJava和EventBus的区别

RxJava和EventBus的区别可分为以下几点:

1、RxJava要比EventBus的应用更广泛,EventBus仅仅是作为一种消息的传递工具,但是RxJava里面几乎可以做任何事情。

2、如果是Android开发的话,可以使用RxAndroid,这是对RxJava的一个扩展,结合sqare公司的retrofit可以很轻松的完成网络的访问。

3、在Android中异步操作一般使用AsycTask来完成,但是AsycTask有很多缺点,如不能方便的终止任务的执行等。

4、RxAndroid完全可以替代AsycTask来完成各种异步操作,而且还有BindActivity和BindFragment方法,你悄掘告根本不需要考虑异步操作时的Activity和Fragment的生命周期问题,还有更加强大的的链式启明调用,可以使程序很简洁。

两者之间的联系:RxJava和EventBus一样也是基散轿于观察者模式,但是使用的场景确实异步数据流的处理。

关于rxjava和rxjava线程池的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表