我有以下代码块调用两个请求略有延迟。
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)。感谢您的意见。
(…)之后的,未来
模式之后的版本将立即开始执行,并将延迟完成此方法产生的未来。然而,如果您想延迟开始执行,您将需要在(...,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时会在回调中传递琐碎的内容,但这会捕获调用者)?