【发布时间】:2018-12-15 12:50:17
【问题描述】:
我有一个 akka 系统,它基本上是两个生产者参与者,它们向一个消费者参与者发送消息。在一个简化的形式中,我有这样的东西:
class ProducerA extends Actor {
def receive = {
case Produce => Consumer ! generateMessageA()
}
... more code ...
}
class ProducerB extends Actor {
def receive = {
case Produce => Consumer ! generateMessageB()
}
... more code ...
}
class Consumer extends Actor {
def receive = {
case A => handleMessageA(A)
case B => handleMessageB(B)
}
... more code ...
}
他们都是同一个akka系统的兄弟姐妹。
我试图弄清楚如何优雅地终止这个系统。这意味着在关闭时,我希望 ProducerA 和 ProducerB 立即停止,然后我希望 Consumer 完成处理消息队列中剩余的所有消息,然后关闭。
似乎我想要的是Consumer 演员能够看到ProducerA 和ProducerB 的终止。或者一般来说,我想要的是能够在两个生产者都停止后向Consumer 发送PoisonPill 消息。
https://alvinalexander.com/scala/how-to-monitor-akka-actor-death-with-watch-method
上面的教程很好地解释了一个actor如何监视另一个actor的终止,但不确定一个actor如何监视多个actor的终止。
【问题讨论】: