Stream Akka处理器的用途

Stream Akka处理器的用途,stream,akka,akka-stream,reactive-streams,Stream,Akka,Akka Stream,Reactive Streams,我正试图弄清楚阿克卡的反应流。我读过这个博客,我想我对它的工作原理有了基本的了解。然而,我不明白的是,处理器在这个概念中的用途。这是干什么用的? 订阅者请求N个对象,发布者使用onNext()发送它们,这还不够吗?假设您有一个真正简单的流程,只有一个源(发布者)和一个接收器(订阅者)。将这两个连接起来,接收器就会订阅发布服务器,并开始请求数据,数据就会流向接收器。在本例中,您真正需要的只是发布者和订阅者。但在本例中,数据在从源到接收器的过程中不会发生任何变化。它没有以任何方式转换,因此不是很有趣

我正试图弄清楚阿克卡的反应流。我读过这个博客,我想我对它的工作原理有了基本的了解。然而,我不明白的是,处理器在这个概念中的用途。这是干什么用的?
订阅者请求N个对象,发布者使用onNext()发送它们,这还不够吗?

假设您有一个真正简单的流程,只有一个源(发布者)和一个接收器(订阅者)。将这两个连接起来,接收器就会订阅发布服务器,并开始请求数据,数据就会流向接收器。在本例中,您真正需要的只是发布者和订阅者。但在本例中,数据在从源到接收器的过程中不会发生任何变化。它没有以任何方式转换,因此不是很有趣,也不是很有用

处理器结合了发布者和订阅者接口,因此可以同时充当这两个角色。处理器意味着在源和接收器之间的处理流中快速插入并转换数据。如果我在前面的source/sink示例中加入一个,那么数据流以及谁订阅了哪些更改。现在,接收器订阅该处理器,处理器反过来订阅源。接收器从处理器请求元素,处理器将该请求向上游传播到源。当有元件满足需求时,它还负责将元件推至水槽下游。这就是为什么它必须实现这两个接口,因为它必须填充这两个角色


在您添加的每个处理步骤中,例如
映射
过滤器
,都添加了另一个可以处理背压的位置。这些步骤不是数据的起始点(源)或目标(接收器)。他们要做的就是接收数据并对其进行处理,或者改变数据流并向下游发送元素以满足需求。因为他们需要能够链接到任何链,所以他们需要发布和订阅功能,这就是处理器存在的原因

假设您有一个真正简单的流程,只有一个源(发布者)和一个接收器(订阅者)。将这两个连接起来,接收器就会订阅发布服务器,并开始请求数据,数据就会流向接收器。在本例中,您真正需要的只是发布者和订阅者。但在本例中,数据在从源到接收器的过程中不会发生任何变化。它没有以任何方式转换,因此不是很有趣,也不是很有用

处理器结合了发布者和订阅者接口,因此可以同时充当这两个角色。处理器意味着在源和接收器之间的处理流中快速插入并转换数据。如果我在前面的source/sink示例中加入一个,那么数据流以及谁订阅了哪些更改。现在,接收器订阅该处理器,处理器反过来订阅源。接收器从处理器请求元素,处理器将该请求向上游传播到源。当有元件满足需求时,它还负责将元件推至水槽下游。这就是为什么它必须实现这两个接口,因为它必须填充这两个角色


在您添加的每个处理步骤中,例如
映射
过滤器
,都添加了另一个可以处理背压的位置。这些步骤不是数据的起始点(源)或目标(接收器)。他们要做的就是接收数据并对其进行处理,或者改变数据流并向下游发送元素以满足需求。因为他们需要能够链接到任何链,所以他们需要发布和订阅功能,这就是处理器存在的原因

因此,基本上,它所做的一切都是介于两者之间,在必要时修改数据,并将其进一步压缩?@Rise,处理器真的能够实现反应流的所有功能。Streams是关于操作、数据和修改流的,如果没有处理器站在这些阶段中,那么您将拥有的只是一个源->汇流,中间没有任何内容。通过这种小型的自包含发布/订阅配对,它允许您绑定到现有流并进行修改,同时仍然可以处理背压,甚至可能更改背压的影响(通过类似于
缓冲区
)的方式),但是如果没有处理器,同样的事情仍然是被动的?接收器仍然会要求它能处理的数据量,不是吗?@Rise,是的,它仍然是反应性的(尽管流不是很有趣),所以基本上它所做的就是站在中间,在必要时改变数据,并将其再压缩一些?@Rise,处理器真的能实现反应性流的一切。Streams是关于操作、数据和修改流的,如果没有处理器站在这些阶段中,那么您将拥有的只是一个源->汇流,中间没有任何内容。通过这种小型的自包含发布/订阅配对,它允许您绑定到现有流并进行修改,同时仍然可以处理背压,甚至可能更改背压的影响(通过类似于
缓冲区
)的方式),但是如果没有处理器,同样的事情仍然是被动的?接收器仍然会要求它能处理的数据量,不是吗?@Rise,是的,它仍然是被动的(尽管流不是很有趣)