美文网首页
RxJava 探索(一)— 介绍

RxJava 探索(一)— 介绍

作者: Little丶Jerry | 来源:发表于2018-11-25 20:32 被阅读0次

    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 操作符已经被删除)。

    相关文章

      网友评论

          本文标题:RxJava 探索(一)— 介绍

          本文链接:https://www.haomeiwen.com/subject/ycnpqqtx.html