如何将异步api公开为自定义akka流源现在不推荐使用ActorPublisher?

时间:2017-08-27 15:26:59

标签: akka akka-stream akka.net

不推荐使用ActorPublisher以支持GraphStage,看起来好像我必须放弃我在GraphStateLogic管理状态下的actor管理状态。但是通过演员管理状态,我能够通过向我的演员发送任意消息来改变状态,而使用GraphStateLogic,我不知道如何做到这一点。

所以之前如果我想创建一个Source来公开通过HTTP请求/响应提供的数据,那么ActorPublisher请求通过Request消息传递给我的演员,我可以做出反应通过在后台启动HTTP请求并将响应发送给我的actor,以便我可以将其内容发送到下游。

如果我无法向其发送任意消息,那么如何使用GraphStageLogic实例进行此操作并不明显。需求通过OnPull()传达,我可以通过在后台启动HTTP请求来做出反应。但是当响应进来时,我如何安全地改变GraphStateLogic的状态?

(除非重要,我使用Akka.Net,但我相信这适用于整个Akka流模型。我认为Akka中的解决方案也是Akka的解决方案。 Net。我还假设ActorPublisher最终也会在Akka.Net中弃用,即使它现在还没有。)

1 个答案:

答案 0 :(得分:1)

我认为这个问题是指“异步边通道”,这里将讨论: http://doc.akka.io/docs/akka/2.5.3/scala/stream/stream-customize.html#using-asynchronous-side-channels

  

使用异步侧信道

     

为了接收未作为流元素到达的异步事件(例如,未来的完成或来自第三方API的回调),必须通过调用AsyncCallback来获取getAsyncCallback()舞台逻辑。方法getAsyncCallback将参数作为异步事件触发时将调用的回调。