我怎样才能调整制作人角色的节奏,使其不会向消费者参与者输送很多信息
本文关键字:消费者 参与者 信息 调整 制作人 节奏 角色 | 更新日期: 2023-09-27 18:34:32
我有一个生成 UpdateItemMessage 的参与者,此消息由多个子角色使用。 我的问题是生产者比消费者参与者快,它生成的消息远远超过子参与者可以消耗的消息,因此我想调整生产者的速度。我尝试做的是使用 Becom(( 和 Unbecom(( 来指示忙/空闲状态。 父/制作人查询子演员状态的最佳实践是什么?
- 生产者调用 询问上下文中的每个项目.GetChildren(( ?
- 消费者告诉生产者,当他们将状态切换为忙碌时?
有很多方法可以做到这一点。一旦流式处理 API 正确移植到 akka.net,做这样的事情可以说会更容易。
例如,假设您的制作人是一个从磁盘上的文件中读取某些内容的演员。其中每行/项代表一些需要的工作做。您在多个工作人员中分配。
我会让工人向生产者发送一条确认消息(通过Sender.Tell(。
然后,我会让生产者批量读取固定大小的行(例如 500(。之后,它通过向自身调度消息来计划要读取的下一批。(通过调度程序这样,您就可以通过使制作人演员能够从您的工人演员那里接收确认来释放它。然后,您可以在制作人演员中保留状态,说明它发出了多少,以及完成了多少工作。
此时,很容易确定您的员工是否准备好进行下一批工作,或者您需要稍等片刻。
另一种方法是通过代理参与者与员工进行通信。这会为您进行节流。(与生产者示例中的方法相同,通过记录与 worker ACK 一起完成的工作量(。这样做的缺点是,节流器参与者将有效地缓冲生产者将向其抛出的所有消息。