说明简介Reactor 是一个基于 JVM 之上的异步应用基础库。为 Java 、Groovy 和其他 JVM 语言提供了构建基于事件和数据驱动应用的抽象库。Reactor 性能相当高,在最新的硬件平台上,使用无堵塞分发器每秒钟可处理 1500 万事件。
图 15,程序员狗如何使用 Reactor-网络所以,为什么你会关心一个进行网络操作的异步运行时?正与章节⎡Microservice with Streams⎦ 一节所示,它更倾向于不阻塞系统应答。从资源方面来说,网络中的非阻塞写操作会比可阻塞的更耗资源,但非阻塞对生产者来说更灵敏。对请求流的响应影响系统的方方面面,最终,会有 1 个或 N 个用户等待它们的时机来推送新消息。
谁都不会比光的速度还要快,唯有坏消息例外,它们遵循自己的一套规律。 道格拉斯∙诺尔∙亚当斯《基本无害》(1992)先来一些网络方面的 Java 8 代码import reactor.io.net.NetStreams;import reactor.io.net.tcp.TcpServer;import reactor.io.net.tcp.TcpClient;//...CountDownLatch latch = new CountDownLatch(10);TcpServer<Buffer, Buffer>
使用注册表(Registry)缓存内存中的值。
EventBus发布和响应事件使用的是请求应答模式。常见的情景是,你希望能够从运行在 EventBus 配置好的调度器(Dispatcher)中的任务里获取应答。Reactor 的 EventBus提供了比简单的发布订阅模型更全面的事件处理模型。除了 Cunsumer,你也可以同样注册一个函数,EventBus会自动将 Function的返回值推送给 replyTo 主键中的主题。在这里,推荐使用 .receive() 和 .
发布使用的是 EventBus ,而响应事件则使用 发布订阅模型Reactor 的 EventBus 可以让你在通知的主键匹配特定条件时创建一个处理事件的消费者(Consumer)。这项任务是在 选择器(Selector) 中被执行的。这跟订阅主题很像,但 Reactor 选择器 的实现可以匹配各种标准,从 Class<?> 类型到 JsonPath 表达式。这种抽象化非常的灵活且强大,它为匹配提供了广泛的可能性。
图14,程序员狗如何使用 reactor 总线
除了 Reactive Stream 直接实现的方法之外,还有一些 Stream 方法并没有被涉及,或是没有录入 Reactive 扩展文档之中。表 22,在前面的用例中未涉及的一些方法
分区(Partition)是一种针对并行、并发作业的 Stream。 以响应式编程的方式编写的功能组件,有一个重要的方面就是它的工作可以审慎的切块,交由任意调度器完成。这意味着你可以很轻松的将输入值组合冲一个工作流——在另一个线程执行操作,然后当结果可用时将其交给子序列,完成转化。这是 Reactor 很常见的使用模式。 DispatcherSupplier supplier1 = Environment.
度量操作和其它状态化操作一样,都是 Stream API 的一部分。实际上,熟悉 Spark 的用户能够认出一些方法。ScanAction也提供了一些常用的同 reduce()和scan()相关的累积功能。 使用键/值型数据和度量操作Broadcaster<Integer> source = Broadcaster.<Integer> create(Environment.get());long avgTime = 50l;Promise<Long> result = source .
关注时代Java