App 1向App 2发送请求.App 2执行以下步骤并将响应返回给App 1.我想知道App 2是否可以从使用RxJava,Reactor等反应库中受益。如果是这样,请解释如何?
答案 0 :(得分:4)
这可能是您可能找到的反应库的经典用例! :)
“被动”架构的关键部分是它们可以响应事件而不是等待结果。 RxJava通过Observable
促进了这一点,Reactor通过几种不同的机制来实现这一点。在Reactor中,您可以使用普通Reactor
并在replyTo
上设置Event
,您可以使用Stream
或Promise
撰写链处理与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()
。