在这种情况下,我可以从反应库中受益吗?

时间:2014-05-28 01:14:52

标签: java reactor rx-java

App 1向App 2发送请求.App 2执行以下步骤并将响应返回给App 1.我想知道App 2是否可以从使用RxJava,Reactor等反应库中受益。如果是这样,请解释如何?

  1. 将HTTP Post请求发送到所有7个数据源服务
  2. 等待来自他们的回复并解析所有回复
  3. 合并所有回复
  4. 返回对App 1的回复
  5. enter image description here

1 个答案:

答案 0 :(得分:4)

这可能是您可能找到的反应库的经典用例! :)

“被动”架构的关键部分是它们可以响应事件而不是等待结果。 RxJava通过Observable促进了这一点,Reactor通过几种不同的机制来实现这一点。在Reactor中,您可以使用普通Reactor并在replyTo上设置Event,您可以使用StreamPromise撰写链处理与RxJava的Observable非常相似的值,您可以使用Processor进行高速RingBuffer处理,也可以使用ForkJoinPool进行简单的fork / join样式处理。当然,这是很多选择,但每个选项都是针对特定用例而设计的,而不会影响其他用例。反应堆框架不是单一的可调扳手。这是一套完全符合您需要的扳手。

在这种特殊情况下,重要的部分是通过大量工作并发实现的并行性,因为您的数据源IO可能阻塞了线程。 RxJava有一个可插拔的执行模型,但它相当粗糙。 Reactor的优势之一是高效,细粒度的任务调度支持以及您对结果的轻松反应。

由于您的用例非常简单并且更接近标准ThreadPoolExecutor情况,因此我可能会尝试使用the ForkJoinPool in Reactor 1.1(这是全新的)。 ForkJoinPool为您提供了一个Promise<ImmutableList<T>>,它连接了您提交给池的所有任务的结果,该池由标准ThreadPoolExecutor支持。它基本上是一个标准线程池周围的“被动”包装器,因此需要很少的开销,但可以灵活地响应所有提交任务的完成。它类似于RxJava的Observable.merge()