RxJava 是 ReactiveX 在 JVM 上的一个实现,ReactiveX 使用 Observable
序列组合异步和基于事件的程序。
更多关于 ReactiveX 的资料,可以看这里:
一、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 示例:
<dependency>
<groupId>io.reactivex.rxjava2</groupId>
<artifactId>rxjava</artifactId>
<version>2.2.0</version>
</dependency>
Ivy 示例:
<dependency org="io.reactivex.rxjava2" name="rxjava" rev="2.2.0" />
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 或更高版本:
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.reactivex.rxjava2</groupId>
<artifactId>rxjava</artifactId>
<version>2.2.0</version>
<name>RxJava</name>
<description>Reactive Extensions for Java</description>
<url>https://github.com/ReactiveX/RxJava</url>
<dependencies>
<dependency>
<groupId>io.reactivex.rxjava2</groupId>
<artifactId>rxjava</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
</project>
然后执行:
$ mvn -f download-rxjava-pom.xml dependency:copy-dependencies
该命令将 rxjava - * .jar
及其依赖项下载到 ./target/dependency/
。
不想这么麻烦的话,可以直接在以下地址下载 JAR 文件:
2.2 快照版本 Snapshots
快照版本可通过 JFrog 获得:
repositories {
maven { url 'https://oss.jfrog.org/libs-snapshot' }
}
dependencies {
compile 'io.reactivex.rxjava2:rxjava:2.2.0-SNAPSHOT'
}
2.3 编译构建 Building
检查和构建 RxJava 的源码,使用以下命令:
$ git clone git@github.com: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
替代Func1
(Func1
已经被移除)。 -
RxJava 2 使用
BiFunction
替代Func2
(Func2
已经被移除)。 -
RxJava 2 使用
CompositeDisposable
替代CompositeSubscription
和Subscription
(CompositeSubscription
和Subscription
已经被移除)。 -
RxJava 2 使用
take
操作符替代limit
操作符(limit
操作符已经被删除)。
网友评论