Java 在这种情况下,我能从反应式库中获益吗?
应用1向应用2发送请求。应用程序2执行以下步骤并将响应返回给应用程序1。我想知道应用程序2是否能从使用RxJava、Reactor等反应性库中获益。如果是,请解释如何受益Java 在这种情况下,我能从反应式库中获益吗?,java,reactor,rx-java,Java,Reactor,Rx Java,应用1向应用2发送请求。应用程序2执行以下步骤并将响应返回给应用程序1。我想知道应用程序2是否能从使用RxJava、Reactor等反应性库中获益。如果是,请解释如何受益 向所有7个数据源服务发送HTTP Post请求 等待他们的响应并解析所有响应 合并所有响应 返回对应用程序1的响应 这是您可能会发现的反应式库的经典用例!:) “反应式”体系结构的关键部分是它们可以响应事件,而不是等待结果。RxJava通过可观察的来实现这一点,Reactor通过几种不同的机制来实现这一点。在Reactor中,
这是您可能会发现的反应式库的经典用例!:) “反应式”体系结构的关键部分是它们可以响应事件,而不是等待结果。RxJava通过
可观察的来实现这一点,Reactor通过几种不同的机制来实现这一点。在Reactor中,您可以使用一个普通的Reactor
并在事件上设置一个replyTo
,您可以使用流
或承诺
对值组成一个处理链,非常类似于RxJava的可观察
,您可以使用处理器
进行高速环形缓冲区处理,或者可以使用ForkJoinPool
进行简单的fork/join样式处理。当然,这有很多选择,但是每一个都是为了在特定的用例中工作而设计的,不会影响其他用例。反应堆框架不是一个单一的可调扳手。这是一套适合你需要的扳手
在这种特殊情况下,重要的部分是通过并发执行大量工作来实现并行性,因为您的数据源IO可能正在阻塞线程。RxJava有一个可插拔的执行模型,但它的粒度相当粗。Reactor的优势之一是高效、细粒度的任务调度支持,以及您可以轻松地对结果做出反应
由于您的用例非常简单,并且非常接近标准的ThreadPoolExecutor
情况,因此我可能会尝试使用(这是全新的)。ForkJoinPool
为您提供了一个单一的Promise
,它将您提交到池中的所有任务的结果连接起来,并由标准的ThreadPoolExecutor
支持。它基本上是一个围绕标准线程池的“反应式”包装器,因此只需要很少的开销,但提供了对所有提交任务的完成作出反应的灵活性。它类似于RxJava的Observable.merge()
这是您可能发现的反应式库的经典用例!)
“反应式”体系结构的关键部分是它们可以响应事件,而不是等待结果。RxJava通过可观察的来实现这一点,Reactor通过几种不同的机制来实现这一点。在Reactor中,您可以使用一个普通的Reactor
并在事件上设置一个replyTo
,您可以使用流
或承诺
对值组成一个处理链,非常类似于RxJava的可观察
,您可以使用处理器
进行高速环形缓冲区处理,或者可以使用ForkJoinPool
进行简单的fork/join样式处理。当然,这有很多选择,但是每一个都是为了在特定的用例中工作而设计的,不会影响其他用例。反应堆框架不是一个单一的可调扳手。这是一套适合你需要的扳手
在这种特殊情况下,重要的部分是通过并发执行大量工作来实现并行性,因为您的数据源IO可能正在阻塞线程。RxJava有一个可插拔的执行模型,但它的粒度相当粗。Reactor的优势之一是高效、细粒度的任务调度支持,以及您可以轻松地对结果做出反应
由于您的用例非常简单,并且非常接近标准的ThreadPoolExecutor
情况,因此我可能会尝试使用(这是全新的)。ForkJoinPool
为您提供了一个单一的Promise
,它将您提交到池中的所有任务的结果连接起来,并由标准的ThreadPoolExecutor
支持。它基本上是一个围绕标准线程池的“反应式”包装器,因此只需要很少的开销,但提供了对所有提交任务的完成作出反应的灵活性。它类似于RxJava的Observable.merge()
我知道:您想在这里使用反应式
解决方案,但我想添加一些噪音。在EIP中,它调用splitaggregate
,Spring Integration提供了现成的解决方案。在这种情况下,拆分器可以将项目发送到ThreadPoolExecutor
,或者,如果需要,发送到Reactor,或者只发送到RingBuffer。每个数据源服务
都应将其结果发送到聚合器
,最后一个服务只发送合并响应。@ArtemBilan我熟悉EIP,多年来一直使用camel和spring集成。但我的问题是关于在这种特定情况下采取反应式的好处。我知道:您想在这里使用反应式
解决方案,但我想添加一些噪音。在EIP中,它调用splitaggregate
,Spring Integration提供了现成的解决方案。在这种情况下,拆分器可以将项目发送到ThreadPoolExecutor
,或者,如果需要,发送到Reactor,或者只发送到RingBuffer。每个数据源服务
都应将其结果发送到聚合器
,最后一个服务只发送合并响应。@ArtemBilan我熟悉EIP,多年来一直使用camel和spring集成。但我的问题是关于在这种特殊情况下采取反应式的好处。如果我想继续,即使7个数据源中的某些数据源出现故障,该怎么办?对于这个场景,你建议哪一个:RxJava还是Reactor?我想将线程管理委托给Spring的TaskExec