【问题标题】:How to expose an asynchronous api as a custom akka stream Source now that ActorPublisher is deprecated?既然 ActorPublisher 已被弃用,如何将异步 api 公开为自定义 akka 流源?
【发布时间】:2017-08-27 15:26:59
【问题描述】:

不推荐使用ActorPublisher 以支持GraphStage,看起来我必须放弃我的actor-managed state 以换取GraphStateLogic-managed state。但是使用 actor 管理的状态,我可以通过向我的 actor 发送任意消息来改变状态,而使用 GraphStateLogic 我不知道该怎么做。

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

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

(旁白:以防万一,我使用的是 Akka.Net,但我相信这适用于整个 Akka 流模型。我假设 Akka 中的解决方案也是 Akka.Net 中的解决方案。我还假设 ActorPublisher 最终也会在 Akka.Net 中被弃用,即使目前还没有。)

【问题讨论】:

    标签: akka akka-stream akka.net


    【解决方案1】:

    我认为问题是指“异步侧通道”,并在此处讨论: http://doc.akka.io/docs/akka/2.5.3/scala/stream/stream-customize.html#using-asynchronous-side-channels.

    使用异步侧通道

    为了接收不是作为流元素到达的异步事件(例如,未来的完成或来自第 3 方 API 的回调),必须通过从阶段逻辑调用 getAsyncCallback() 来获取 AsyncCallback。方法getAsyncCallback 将回调作为参数,一旦异步事件触发,该回调将被调用。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2018-12-03
    相关资源
    最近更新 更多