[英]How to restrict the akka actor to do one job at a time
我有一个基于Java-Akka的应用程序,其中一个Akka演员告诉另一个Akka演员执行某些作业,并且它在命令提示符下开始执行该作业,但是如果我给他10个作业,它将在10个命令提示符下一次启动所有作业。 如果我要拥有100多个工作,则我的系统将被挂起。
因此,如何使我的应用程序一次执行1个工作,而其他所有工作都应该以FIFO(先进先出)的方式获得CPU。
问题不是很清楚,但是我尝试以我的理解来回答。
因此,似乎您将actor用作工作分配器,它将工作消息转换为对某些“工作执行者系统”的调用。 每个传入消息都会转换为某个呼叫。
如果此调用是同步的(当然,在与actor一起工作时会闻起来,但只是为了理解),那么在您的情况下没有问题,您的actor会等到调用完成后,再继续其邮箱中的下一条消息。
如果该调用是异步的(我想您拥有什么),那么所有消息将被一个接一个地处理,而不会彼此等待。
因此,您需要限制消息处理,以便一次最多处理一条消息。 可以通过此处描述的“拉”模式将其存档。 您基本上分配了一个主角色,该主actor具有一个队列,其中包含传入的消息(作业),一个工人角色,在没有工作时要求工作。 注意主角中的队列-您可能不希望队列过长,考虑监视和施加反压,这是akka-stream涵盖的另一个大话题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.