Akka.Net:网络上的反应流

Akka.Net: Reactive Streams over the network

我正在尝试将 Source 作为源,将 Sink 作为远程,然后将 Sink 作为源,将 Source 作为远程,分别在 AkkaStreamsModel 中实现类型 1 和类型 2 工作流。

类型 1 创建一个 SourceRef 并将其传递给远程 actor 作为接收 actor 的传入数据的公开源。类型 2 创建一个 SinkRef 并将其作为暴露的接收器传递给远程参与者以开始向其发送数据。为了进一步解释,我已将类型 1 (AkkaStreams) and Type 2 (AkkaStreamsFaulty) 工作流上传到 GitHub。

类型 1 工作流已设置并正常工作,但是类型 2 工作流有问题。我已将问题缩小到 DataReceiver 演员中的 Receive<PrepareUpload>() 方法。成功创建接收器后,使用 PipeTo() 方法将流和接收器发送(通过 MeasurementsSinkReady 消息)到源参与者。

任何人都可以指出我在 Type 2 工作流程中可能出错的地方吗?我已经用尽所有其他选项(Akka.Net Documentation; Akka.Net Gitter、各种博客和视频等)。我不确定从这里去哪里,任何帮助将不胜感激。

谢谢。

编辑(根据 Bartosz Sypytkowski's 评论添加了额外信息)

永远不会在两个参与者之间远程发送数据,这就是问题所在。使用类型 1,建立 SourceRef 并将其发送到远程参与者。远程参与者收到此消息。然而,对于类型 2,SinkRef 被创建但从未到达远程 actor。 因此,我认为问题出在 SinkRefPipeTo() 方法的生成上。这是因为如果您在参与者之间发送消息,它会起作用,但如果该消息以 SinkRef 设置正确为条件,那么设置就会出错。

这是 Akka.Streams 实现中的错误 - 从 v1.4.14 开始,此问题已得到修复:https://github.com/akkadotnet/akka.net/issues/4421