当前位置: 首页 > 知识库问答 >
问题:

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

阎善
2023-03-14

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

奥利维耶

共有1个答案

公良修竹
2023-03-14

这个问题现在已经很老了,但正如sourcedelica提到的,您的目标之一可能是编写不阻塞线程的反应代码。Spray的人最出名的是他们的异步HTTP服务器和令人敬畏的路由DSL(您可以使用它创建自己的API),但他们也提供了一个Spray-client包,允许您的应用程序访问其他服务器。它基于未来,因此允许你在没有阻塞的情况下完成事情。菲利普·安德森写了一个说明性的例子;这里有几行可以给你这样的想法:

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)
}

如果您熟悉期货,您就知道如何在不阻塞的情况下进一步操作期货(就像map调用一样)。Spray的客户机库使用与服务器端相同的底层数据结构和概念,如果您要在一个应用程序中同时使用这两种结构和概念,这将非常方便。

 类似资料:
  • 问题内容: 在我们的Web应用程序中,用户可以进行需要大量数据库表进行更新的更改。所有内容的加载时间最长为30秒。我不希望用户在导航到另一个页面之前等待其完成。 我将长时间运行的代码放在自己的页面上(例如,“ updateinfo.aspx”),并尝试了一些解决方案,包括jQuery AJAX调用“ updateinfo.aspx”或加载调用“ updateinfo.aspx”的图像文件。在所有情

  • 我在context.xml文件中定义了一个Spring调度任务,它每分钟运行一次。该任务调用postgres存储过程。存储过程运行时可以持续一分钟以上。如果当前运行没有完成,spring框架会调用相同的调度程序吗?谢谢,

  • 我正在尝试将一个向服务器发送消息的异步任务迁移到RxJava。该任务大致执行以下操作: 1) 创建将要发送的消息(保存到数据库) 2)向用户显示消息(状态为“发送”) 3)将消息发送到服务器(下面的代码段) 4)将消息标记为已发送或失败(保存到数据库) 5)更新UI 我创建了所需的Rx链,部分如下所示: 当我订阅上述内容时,我会得到一个一次性的。通常,我会将其添加到CompositeDisposa

  • 问题内容: 我有一个python celery-redis队列处理一次上传和下载值得一次演出和大量演出的数据。 很少有上传内容需要花费几个小时的时间。但是,一旦完成了这样的任务,我就目睹了这种奇怪的芹菜行为:芹菜调度程序通过将其再次发送给工作人员来重新运行刚刚完成的任务(我正在运行一个工作人员),并且它在同一时间发生了2次任务! 有人可以帮助我知道为什么会发生这种情况以及如何预防吗? 这些任务肯定

  • 问题内容: 我的应用程序运行一些数据库查询,这可能需要很长时间。 在执行这些查询时,我的应用程序似乎死机了,看起来该应用程序已停止工作。 我需要使用progressbar来避免此问题,但是我不确定如何预测查询执行所花费的时间。 运行查询的代码如下 如何显示进度条以显示查询的进度? 问题答案: 您可以用来解决这类问题。 首先定义一个类的全局变量, 例如 然后在执行查询(如事件或其他任何内容)的过程中

  • 我正在使用Flexible App Engine和Python3构建一个应用程序。在标准appEngine中,如果您需要运行超过60的任务,您可以使用task队列或我成功完成的延迟库(任务队列的抽象)。 Flexible App Engine不再支持包含这些函数的appengine api。相反,功能正在迁移到谷歌云库(https://googlecloudplatform.github.io/g