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

Akka调度

颜新
2023-03-14

我有以下代码块调用两个请求略有延迟。

    final ActorRef actor1 = getContext().actorOf(
            ActorClass.props(context,
            "actor1");
    futures.add(ask(actor1 , msg1, t));

    final ActorRef actor2 = getContext().actorOf(
            ActorClass.props(context,
            "actor2");
    futures.add(Patterns.after(Duration.create(10000, TimeUnit.MILLISECONDS),
            getContext().system().scheduler() , 
            getContext().dispatcher(), ask(actor2,msg2,t)));

在actor1和actor2中,我调用了一个REST请求,该请求返回一个cookie和响应消息。我在这里的意图是延迟发送与actor2对应的REST请求。然而,我从日志中观察到,请求立即从两个参与者发送,只有响应处理(在两个未来之间)延迟10秒。这是Akka中调度器的预期行为吗?如果我想在上述情况下延迟两个参与者之间的请求启动,我可以使用线程。睡觉(我在某个地方读到不建议在akka演员内使用Thread.sleep)。感谢您的意见。

共有1个答案

乌翰学
2023-03-14

(…)之后的,未来

模式之后的版本将立即开始执行,并将延迟完成此方法产生的未来。然而,如果您想延迟开始执行,您将需要在(...,Callable之后使用

// example code in Scala, but uses Java API

// future executes ASAP
print("Hello ")
Patterns.after(1.second, sys.scheduler, sys.dispatcher, Future { println("World!") })

// future executes after 1 second
print("Hello ")
Patterns.after(1.second, sys.scheduler, sys.dispatcher, 
  new Callable[Future[Unit]] {
    override def call() = Future { println("World!") }
  }
)

哈金快乐!

 类似资料:
  • 我正在执行Akka-http框架(版本:10.0)的负载测试,我正在使用wrk工具。wrk命令: WRK输出: 现在,如果我在路由中添加一个将来的调用并再次运行测试。 WRK的输出: 现在,我应该使用哪些其他参数或配置来提高性能,同时使用future Call.,以便应用程序提供最大的吞吐量。

  • 在阅读了Akka的文档和网上的一些帖子之后,我仍然对路由器和调度器之间的关系没有一个清楚的认识。 1)路由器是否总是使用dispatcher向路由进行调度?路由器是否可以不使用dispatcher完成其工作? 2)如果配置中没有定义额外的调度器,我的理解是将使用默认调度器。在我的actor系统中,我有一个集群,其中有两个生产者actor使用路由器actor和三个消费者actor。生产者和消费者都运

  • 我们尝试在host-connection-pool下调整池、actor实例和所有其他参数的大小,但没有更好的效果。 欢迎任何建议!

  • 但没有。在应用程序中创建的dispatcher线程使我在优化dispatcher配置时束手无策。每次重新启动应用程序时,我都看到创建了不同数量的dispatcher线程(每次启动应用程序后,我都通过线程转储检查这一点)。 甚至线程数也不等于我在Parallelism-min中定义的线程数。由于这个低线程数,我的应用程序的处理速度非常慢。一查号码。通过下面的代码: GetRuntime().Avai

  • 我有一个基于喷雾的HTTP服务。我有一个在这个HTTP应用程序内部运行的流。现在由于这个流要做大量的I/O,所以我决定使用一个单独的线程池。我查阅了Akka文档,看看我可以做些什么来使我的线程池是可配置的。我在Akka遇到了调度器的概念。所以我尝试在application.conf中使用它如下所示: 在我的执行元中,我尝试将此配置查找为: 当我运行我的服务时,我得到以下错误:

  • 我有一个actor可以从外部系统(UDP/TCP)接收消息。根据传入数据的内容,有时我希望actor回调代码的非AKA部分。 换句话说,我不想用调用和actor并等待一些传入数据,而是异步回调。 我如何实现这一点而不关闭调用对象(在创建ActorRef时会在回调中传递琐碎的内容,但这会捕获调用者)?