gpt4 book ai didi

java - Akka 调度

转载 作者:行者123 更新时间:2023-11-30 03:49:31 26 4
gpt4 key购买 nike

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

    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请求。然而,我从日志中观察到,请求是从两个参与者立即发送的,只有响应处理(两个 future 之间)延迟了 10 秒。这是 Akka 中调度程序的预期行为吗?如果我想在上述情况下延迟两个参与者之间的请求启动,我可以使用 Thread.sleep 吗? (我在某处读到不建议在 akka actor 中使用 Thread.sleep)。欣赏投入。

最佳答案

after(..., Future<T>)模式的语义与您想象的不同。

此版本的after模式将立即开始执行,并将延迟完成从此方法产生的 future 。但是,如果您想延迟开始执行,则需要使用 after(..., Callable<Future<T>>) 。换句话说,比较这两种方法:

// 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!") }
}
)

祝你快乐!

关于java - Akka 调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24772999/

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