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

阻止Akka Actors中的呼叫

傅琦
2023-03-14

作为一个新手,我正在努力理解演员是如何工作的。从文档中,我想我理解了actor是在同步模式下执行的对象,并且actor执行可以包含阻塞/sync方法调用,例如db请求

如果是这种情况,那么执行非阻塞/异步调用的推荐方法是什么呢?比方说一个web服务调用,它获取一些东西并在请求完成时向另一个参与者发送消息?我们是否应该简单地在actor中使用以下内容:

未来映射{response=>x!response.body}

这是正确的处理方式吗?

共有1个答案

龙德润
2023-03-14

这实际上取决于用例。如果查询不需要序列化,那么您可以在将来执行查询,并将结果发送回发送方,如下所示:

import scala.concurrent.{ future, blocking}
import akka.pattern.pipe

val resFut = future {
  blocking {
    executeQuery()
  }
}

resFut pipeTo sender

您还可以专门为DB调用创建一个专用的调度程序,并使用路由器创建执行元。通过这种方式,您还可以轻松地限制并发DB请求的数量。

 类似资料:
  • CallKit的呼叫目录扩展可用于阻止标准电话呼叫。然而,iOS13应该如何阻止VoIP呼叫呢? 当有一个VoIP电话时,你的应用程序会收到一个VoIP推送,但现在在iOS13中,苹果强制要求当收到推送时,应用程序必须调用。

  • 我想知道正常的java API调用(我的意思是没有I/O的方法)是否应该被线程化为“迷你阻塞调用”?是否可以像这样实现Reactive Streams(在返回Publisher之前调用方法): 而不是(在流中调用它) 此验证器仅用于示例。这种方法是否有任何缺点,或者这些方法在返回语句之前应该总是包含在流中?

  • 问题内容: 我对Go如何处理非阻塞IO感到困惑。API在我看来基本上是同步的,并且在Go上观看演示时,听到诸如“和调用块”之类的注释并不罕见。 从文件或网络读取时,Go是否使用阻塞IO?还是当在Go Routine中使用某种魔术来重写代码? 来自C#背景,这感觉非常不直观,在C#中,当使用异步API时我们使用了关键字。这清楚地表明,API可以产生当前线程,并在以后的延续中继续。 因此,TLDR;当

  • 我试图做一个非阻塞子进程调用,从我的main.py程序运行slave.py脚本。我需要通过args从main.pyslave.py一次,当它(slave.py)首次启动通过subprocess.call后,slave.py运行一段时间,然后退出。 还有我的奴隶剧本 现在是奴隶。py块主要。py从运行它的其余任务开始,我只需要一个slave。py独立于main。py,一旦我把args传递给它。这两个

  • 问题内容: 传统上,在Objc中,我们会执行weakSelf来防止块的额外保留计数。 swift如何在内部管理Objc块中发生的保留周期? 问题答案: 为防止块对对象的强烈引用,必须为块定义捕获列表。 闭包表达式的语法定义如下: 但这会在文档的后面进行扩展以包括捕获列表。这实际上等效于如下定义的表达式语法: …在哪里可以是或。 捕获列表是出现在闭包中的第一件事,它是可选的。如上所示,语法定义为一对