应用程序 1 向应用程序 2 发送请求。应用程序 2 执行以下步骤并将响应返回给应用程序 1。我想知道应用程序 2 是否可以从使用 RxJava、Reactor 等反应式库中受益。如果可以,请解释一下如何?
- 将 HTTP Post 请求发送到所有 7 个数据源服务
- 等待他们的响应并解析所有响应
- 合并所有回复
- 返回对 App 1 的响应
这是您可能会发现的反应式库的经典用例!:)
“反应式”架构的关键部分是它们可以响应事件而不是等待结果。RxJava通过多种不同的机制来实现这一点,Observable
而 Reactor 则通过几种不同的机制来实现这一点。在 Reactor 中,你可以使用一个 plain并在上Reactor
设置 a ,你可以使用 a或 a组成一个对值的处理链,就像 RxJava 的那样,你可以使用 a来进行高速 RingBuffer 处理,或者你可以使用一个for做简单的 fork/join 样式处理。当然,有很多选项,但每个选项都旨在在特定用例中工作,而不会影响其他用例。Reactor 框架不是单一的可调节扳手。这是一套尺寸完全符合您需要的扳手。replyTo
Event
Stream
Promise
Observable
Processor
ForkJoinPool
在这种特殊情况下,重要的部分是通过并发执行大量工作来实现并行性,因为您的数据源 IO 可能会阻塞线程。RxJava 有一个可插入的执行模型,但它是相当粗粒度的。Reactor 的优势之一是高效、细粒度的任务调度支持以及您可以轻松地对结果做出反应。
由于您的用例非常简单并且更接近标准ThreadPoolExecutor
情况,因此我可能很想使用Reactor 1.1中的ForkJoinPool
(全新的)。ForkJoinPool
为您提供了一个将您提交到池中的所有任务的结果连接起来的单个,Promise<ImmutableList<T>>
它由标准支持ThreadPoolExecutor
。它基本上是标准线程池的“反应式”包装器,因此需要很少的开销,但提供了对所有提交任务的完成做出反应的灵活性。它类似于 RxJava 的Observable.merge()
.