RxJava 探索(一)— 介绍

RxJava GitHub 主页

RxJava Wiki 主页

RxJava 是 ReactiveX 在 JVM 上的一个实现,ReactiveX 使用 Observable 序列组合异步和基于事件的程序。

更多关于 ReactiveX 的资料,可以看这里:

ReactiveX 探索(一)— Rx 介绍

ReactiveX 探索(二) — Rx 五大部件

一、RxJava 介绍

1.1 RxJava 是轻量级的

RxJava 尽力做到非常轻巧。它仅关注 Observable 的抽象和与之相关的高层函数,实现为一个单独的 JAR 文件。

1.2 RxJava 是一个多语言实现

RxJava 支持 Java 6 或者更新的版本,以及其它的 JVM 语言如 Groovy,Clojure,JRuby,Kotlin 和 Scala。RxJava 可用于更多的语言环境,而不仅仅是 Java 和 Scala,而且它致力于尊重每一种 JVM 语言的习惯。

1.3 RxJava 第三方库

下面是可与 RxJava 协作的第三方库:

  • Hystrix - 用于分布式系统的一个延时和容错处理框架

  • Camel RX - 一个用于 Apache Camel 的 RxJava 兼容层

  • rxjava-http-tail - 让你可以跟踪 HTTP 日志,就像使用 tail -f 一样

  • mod-rxvertx - Extension for VertX - 使用 RxJava 封装的 VertX 库

  • rxjava-jdbc - 使用 RxJava 流式处理 JDBC 连接,还支持语句的函数式组合

  • rtree - 使用 RxJava 实现的一个纯内存的不可变的 R-tree 和 R*-tree

二、入门指南

2.1 正式版本

你可以在 Maven Central 找到用于 Maven,Ivy,Gradle,SBT 和其它构建工具需要的二进制文件和依赖信息.

Maven 示例:


    io.reactivex.rxjava2
    rxjava
    2.2.0

Ivy 示例:


SBT 示例:

libraryDependencies += "io.reactivex" %% "rxscala" % "0.26.5"

libraryDependencies += "io.reactivex.rxjava2" % "rxjava" % "2.2.0"

Gradle 示例:

compile 'io.reactivex.rxjava2:rxjava:2.2.0'

如果你不是使用构建系统,而是想要直接下载 jar,请使用所需的版本创建这样的 Maven pom 文件,你需要使用 Java 6 或更高版本:



      4.0.0
      io.reactivex.rxjava2
      rxjava
      2.2.0
      RxJava
      Reactive Extensions for Java
      https://github.com/ReactiveX/RxJava
      
          
              io.reactivex.rxjava2
              rxjava
              2.2.0
          
      

然后执行:

$ mvn -f download-rxjava-pom.xml dependency:copy-dependencies

该命令将 rxjava - * .jar 及其依赖项下载到 ./target/dependency/

不想这么麻烦的话,可以直接在以下地址下载 JAR 文件:

https://repo1.maven.org/maven2/io/reactivex/

2.2 快照版本 Snapshots

快照版本可通过 JFrog 获得:

repositories {
    maven { url 'https://oss.jfrog.org/libs-snapshot' }
}

dependencies {
    compile 'io.reactivex.rxjava2:rxjava:2.2.0-SNAPSHOT'
}

maven 快照版本和发布版本区别

2.3 编译构建 Building

检查和构建 RxJava 的源码,使用以下命令:

$ git clone [email protected]:ReactiveX/RxJava.git
$ cd RxJava/
$ ./gradlew build

要执行一个完整的构建,使用这个命令:

$ ./gradlew clean build

构建命令的输出大概是这样的:

$ ./gradlew build
:rxjava:compileJava
:rxjava:processResources UP-TO-DATE
:rxjava:classes
:rxjava:jar
:rxjava:sourcesJar
:rxjava:signArchives SKIPPED
:rxjava:assemble
:rxjava:licenseMain UP-TO-DATE
:rxjava:licenseTest UP-TO-DATE
:rxjava:compileTestJava
:rxjava:processTestResources UP-TO-DATE
:rxjava:testClasses
:rxjava:test
:rxjava:check
:rxjava:build

BUILD SUCCESSFUL

Total time: 30.758 secs

执行完整的构建的话,你会看到单元测试的执行,输出类似于这样:

> Building > :rxjava:test > 91 tests completed

2.4 故障排除

有一位开发者上报了下面这个错误:

Could not resolve all dependencies for configuration ':language-adaptors:rxjava-scala:provided'

他在从 .gradle/caches.m2/repository/org/scala-lang/ 移除了旧版本的 scala-library 之后解决了这个问题,然后执行了一次完整构建。(查看详细信息)

在构建 RxJava 时你可能会遇到下面的错误:

Failed to apply plugin [id 'java'] Could not generate a proxy class for class nebula.core.NamedContainerProperOrder.

这是 JVM 的问题,详细信息可以参考 GROOVY-6951。如果遇到这个问题,可以在构建 RxJava 之前执行 export GRADLE_OPTS=-noverify,或者升级你机器上的 JDK。

2.5 RxJava 2 对比 RxJava 1

  • RxJava 2 使用 onComplete 替代 onCompleted

  • RxJava 2 使用 Function 替代 Func1Func1 已经被移除)。

  • RxJava 2 使用 BiFunction 替代 Func2Func2 已经被移除)。

  • RxJava 2 使用 CompositeDisposable 替代 CompositeSubscriptionSubscriptionCompositeSubscriptionSubscription 已经被移除)。

  • RxJava 2 使用 take 操作符替代 limit 操作符(limit 操作符已经被删除)。

你可能感兴趣的:(RxJava 探索(一)— 介绍)