我如何调整生产者演员的节奏,使其不会向消费者演员发送太多消息
How Can i pace a producer actor so that it does not pump to many message to a consumer actor
我有一个生成 UpdateItemMessage 的 actor,此消息被多个子 actor 使用。我的问题是 Producer 比 consumer actors 快,它生成的消息比 child actors 可以消费的多得多,因此我想跟上 producer 的步伐。我尝试做的是使用 Become() 和 Unbecome() 来指示 busy/idle 状态。 parent/producer 查询子演员状态的最佳做法是什么。
- Producer calls 询问 Context.GetChildren() 中的每个项目 ?
- 消费者在将状态切换为忙碌时告诉生产者?
有很多方法可以做到这一点。一旦流 API 被正确移植到 akka.net.
,做这样的事情可以说会更容易
例如,假设您的制作人是一个从磁盘文件中读取内容的演员。其中每个 line/item 代表一些需要完成的工作
完毕。您分配给多个工作人员。
我会让工作人员向生产者发送确认消息(通过 Sender.Tell)。
然后我会让生产者以固定大小(例如 500)分批读取行。之后,它通过为自己安排一条消息来安排要读取的下一批。 (通过调度程序
这样,您可以通过使生产者 actor 能够从您的 worker actor 接收 ack 来释放它。
然后,您可以在生产者 actor 中保持状态,了解它发出了多少,以及完成了多少工作。
此时很容易确定您的工人是否准备好进行下一批工作,或者您需要稍等一下。
另一种方法是您通过代理参与者与您的员工沟通。那会为你节流。 (与 producer 示例中的方式相同,通过结合 worker ack 记录完成了多少工作)。
这样做的缺点是节流器 actor 会有效地缓冲生产者向它抛出的所有消息。
我有一个生成 UpdateItemMessage 的 actor,此消息被多个子 actor 使用。我的问题是 Producer 比 consumer actors 快,它生成的消息比 child actors 可以消费的多得多,因此我想跟上 producer 的步伐。我尝试做的是使用 Become() 和 Unbecome() 来指示 busy/idle 状态。 parent/producer 查询子演员状态的最佳做法是什么。
- Producer calls 询问 Context.GetChildren() 中的每个项目 ?
- 消费者在将状态切换为忙碌时告诉生产者?
有很多方法可以做到这一点。一旦流 API 被正确移植到 akka.net.
,做这样的事情可以说会更容易例如,假设您的制作人是一个从磁盘文件中读取内容的演员。其中每个 line/item 代表一些需要完成的工作 完毕。您分配给多个工作人员。
我会让工作人员向生产者发送确认消息(通过 Sender.Tell)。
然后我会让生产者以固定大小(例如 500)分批读取行。之后,它通过为自己安排一条消息来安排要读取的下一批。 (通过调度程序 这样,您可以通过使生产者 actor 能够从您的 worker actor 接收 ack 来释放它。 然后,您可以在生产者 actor 中保持状态,了解它发出了多少,以及完成了多少工作。
此时很容易确定您的工人是否准备好进行下一批工作,或者您需要稍等一下。
另一种方法是您通过代理参与者与您的员工沟通。那会为你节流。 (与 producer 示例中的方式相同,通过结合 worker ack 记录完成了多少工作)。 这样做的缺点是节流器 actor 会有效地缓冲生产者向它抛出的所有消息。