Akka Reactive Streams处理器的用途

时间:2016-02-01 23:24:48

标签: stream akka akka-stream reactive-streams

我正试图在akka中找不到Reactive Streams。我已经阅读了这篇博客the new @MaxDepth annotation,我想我已经了解了它的工作原理。然而,我不明白的是,这个概念中的Processer的目的。它是为了什么? 订阅者是否足以请求N-Objects和发布者使用onNext()发送它们?

1 个答案:

答案 0 :(得分:2)

假设您有一个真正简单的流程,只有一个Source(发布者)和一个Sink(订阅者)。你将这两个挂起来,接收器订阅发布者并开始请求数据和数据流到接收器。在这个例子中,你真正需要的只是一个发布者和订阅者。但是在这个例子中,从源到接收器的数据没有任何反应。它没有以任何方式改变,因此不是很有趣,也不是很有用。

处理器结合了发布者和订阅者接口,因此可以充当这两种角色。处理器意图被捕捉到源和接收器之间的处理流程并转换数据。如果我从之前的一个源/接收器示例中插入了一个,那么数据流和订阅者会发生什么变化。现在,接收器订阅了该处理器,然后处理器又订阅了源。接收器从处理器请求元素,并且处理器将上游需求传播到源。当有元素满足需求时,它还负责将元素向下游推送到接收器。这就是为什么它必须实现两个接口,因为它必须填补这两个角色。

您添加的每个处理步骤(例如mapfilter)都会添加另一个可以处理背压的地方。这些步骤不是数据的起始点(源)或目标(接收器)。他们所要做的就是接收数据并对其做一些事情或改变它的流程并向下游发送元素以满足需求。因为他们需要能够链接到任何链,他们需要发布和订阅功能以及处理器存在的原因。