- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
来自 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/
我是一名优秀的程序员,十分优秀!