gpt4 book ai didi

akka - 从 akka actor 调用 REST API(或者更一般地说,从 actor 启动长时间运行的任务)

转载 作者:行者123 更新时间:2023-12-02 03:34:12 25 4
gpt4 key购买 nike

来自 akka 新手的问题:假设在某个时刻,我的一位 Actor 想要针对外部 REST API 发出 HTTP 请求。最好的方法是什么? (注意:对于希望将数据存储在 RDBMS 中的参与者,我会问同样的问题)。

我是否应该为此创建另一种类型的参与者,并创建一个此类代理池。然后我是否应该创建一个具有“请对此端点进行 HTTP 调用”语义的消息类型,并且我的第一个参与者是否应该将此消息发送到池以委托(delegate)工作?

这是推荐的模式(而不是在初始 actor 中完成工作)吗?如果是这样,我是否会创建一个消息类型,以便在请求的结果可用时将请求的结果传达给初始参与者?

感谢您的反馈!

奥利维尔

最佳答案

这个问题现在已经很老了,但您的目标之一可能是编写不会阻塞线程的响应式(Reactive)代码,如 sourcedelica 所述。 Spray 人员以其异步 HTTP 服务器和令人敬畏的路由 DSL(您可以使用它来创建自己的 API)而闻名,但他们还提供了 Spray-client。允许您的应用程序访问其他服务器的包。它基于 Futures,因此可以让你在不阻塞的情况下完成任务。菲利普安德森写道 an illustrative example ;这里有几行可以给你一个想法:

val pipeline: HttpRequest => Future[HttpResponse] = sendReceive

// create a function to send a GET request and receive a string response
def get(url: String): Future[String] = {
val futureResponse = pipeline(Get(url))
futureResponse.map(_.entity.asString)
}

如果您熟悉 Futures,您就会知道如何在不阻塞的情况下进一步操作 Futures(比如 map 调用)。 Spray 的客户端库使用与其服务器端相同的底层数据结构和概念,如果您打算在一个应用程序中执行这两项操作,这将非常方便。

关于akka - 从 akka actor 调用 REST API(或者更一般地说,从 actor 启动长时间运行的任务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24805012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com