我如何调整制作人演员的步伐,以便它不会向消费者演员提供许多信息

时间:2016-02-12 17:37:27

标签: c# akka akka.net

我有一个生成UpdateItemMessage的actor,这个消息被多个子actor占用。我的问题是制作人比消费者演员更快,它产生的消息远远超过儿童演员可以消费的消息,因此我想调整制作人的节奏。我尝试做的是使用Become()和Unbecome()来指示忙/闲状态。父/生产者查询子actor的状态的最佳做法是什么。

  • 生产者调用在Context.GetChildren()?
  • 中询问每个项目
  • 消费者在将状态切换为忙时告诉制作人?

1 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点。一旦将流API正确移植到akka.net,做这样的事情可能会更容易。

例如,假设你的制作人是一个从磁盘上的文件中读取内容的演员。每一行/项目代表一些需要的工作 完成。你分配给多个工人。

我会让工人向生产者发送一条确认消息(通过Sender.Tell)。

然后我会让生产者批量读取固定大小的行(例如500)。之后,它通过向自己安排消息来安排读取下一批。 (通过调度程序 通过这种方式,您可以让生产者演员从工人演员那里收到ack。 然后你可以在你的制作人演员中保持状态,告诉他们发出了多少,以及完成了多少工作。

此时,您可以轻松确定您的员工是否已为下一批工作做好准备,或者您需要等待一段时间。

另一种方法是通过代理人与您的员工沟通。这会对你造成限制。 (与生产者示例中的方式相同,通过记录与工作人员一起完成的工作量)。 这样做的缺点是限制器演员将有效地缓冲生产者将抛出的所有消息。