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 示例:

<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 文件:

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 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 替代 Func1Func1 已经被移除)。

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352

推荐阅读更多精彩内容