我正在尝试为集群分片配置Akka Actor,有一点我不太确定,是否可以为一个实体配置几个停止消息以进行正常关闭。
例如,如下所示的实体配置将触发“onDelete”和“onExit”的正常关闭,还是仅触发“onExit”的正常关闭?
sharding
.init(
Entity(Actor1Key) {
context => ....
}
)
.withStopMessage(Actor1.onDelete)
.withStopMessage(Actor1.onExit)
如果没有,你知道我怎样才能达到这种行为吗?
感谢您的解答
2条答案
按热度按时间k7fdbhmy1#
我认为关于
stopMessage
的用途可能会有一些混乱。不应该有多个停止消息的需要。参与者请求了在钝化之后分片发送的
stopMessage
,这是通过从分片的参与者本身发送Passivate
来完成的。您可以让参与者接受的任何消息触发钝化,当参与者可以安全地实际停止时,shard将发回
stopMessage
。您应该钝化而不仅仅是
Behaviors.stopped
执行元的原因是,可能有消息正在发送到执行元(邮箱,我认为在某些情况下可能是碎片中的缓冲区),然后消息导致它决定停止,您希望首先处理这些。钝化允许通过包括到shard
参与者的往返来实现这一点,shard
参与者负责将消息路由到分片参与者。更多详情请参见此处的文档:https://doc.akka.io/docs/akka/current/typed/cluster-sharding.html#passivation
h22fl7wq2#
您所指定的内容只会触发
Actor1.onExit
的停止消息。原因是为实体定义停止消息的方式:所以你可以看到这是一个普通的可选元素,因此不可能有多个元素。你也可以在这里检查
withStopMessage
是如何实现的:因此,每次调用
withStopMessage
时,基本上都会“覆盖”消息。不幸的是,我不知道有任何其他方法可以指定多个停止消息(除了将多个消息组合在一个共同的特性中,但我认为这不是您要找的)。