我如何调整生产者演员的节奏,使其不会向消费者演员发送太多消息

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 查询子演员状态的最佳做法是什么。

有很多方法可以做到这一点。一旦流 API 被正确移植到 akka.net.

,做这样的事情可以说会更容易

例如,假设您的制作人是一个从磁盘文件中读取内容的演员。其中每个 line/item 代表一些需要完成的工作 完毕。您分配给多个工作人员。

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

然后我会让生产者以固定大小(例如 500)分批读取行。之后,它通过为自己安排一条消息来安排要读取的下一批。 (通过调度程序 这样,您可以通过使生产者 actor 能够从您的 worker actor 接收 ack 来释放它。 然后,您可以在生产者 actor 中保持状态,了解它发出了多少,以及完成了多少工作。

此时很容易确定您的工人是否准备好进行下一批工作,或者您需要稍等一下。

另一种方法是您通过代理参与者与您的员工沟通。那会为你节流。 (与 producer 示例中的方式相同,通过结合 worker ack 记录完成了多少工作)。 这样做的缺点是节流器 actor 会有效地缓冲生产者向它抛出的所有消息。