有没有办法在akka集群分片中实现服务降级?
Is there a way to achieve service downgrade in akka cluster sharding?
我正在尝试构建一个 Akka 集群ShardRegion
,当出现错误时可能需要在生产环境中降级。但是,不是通过调用
来注销它
ClusterClientReceptionist.get(nodeActorSystem).unregisterService(shardRegion)
这将在 PoisonPill
之前消耗完所有消息后终止 ShardRegion
及其子 actor,我的分片子 actor 具有需要完成的内部状态和目的。我需要一种优雅的方式来使用 ShardRegion
慢慢降级进程,让中间的任何会话完成,例如任何具有不同 EntityId
的新消息都将发送到其他地方。
我还没有找到任何方法来降级它,或者只是简单地停止任何新的分片 AkkaActor 来支持 ShardRegion.Is 这甚至可以在 Akka Cluster ShardRegion 中实现?
您可以通过指定自定义 stopMessage
来完成其中的一部分。当要钝化或重新平衡实体参与者时,分片区域会将此命令发送给实体参与者。默认值为 PoisonPill
,但自定义的允许实体参与者做任何他们需要做的事情来关闭(在这种情况下他们确实需要最终停止自己)。
如果您触发重新平衡,发送到分片的消息将被缓冲,直到该分片中的所有活动实体都停止为止,这可能符合“任何具有不同实体 ID 的新消息将被发送到其他地方” .请注意,在集群分片之外(即直接在实体参与者之间)发送的消息仍将正常传递(直到所述实体参与者停止)。
我正在尝试构建一个 Akka 集群ShardRegion
,当出现错误时可能需要在生产环境中降级。但是,不是通过调用
ClusterClientReceptionist.get(nodeActorSystem).unregisterService(shardRegion)
这将在 PoisonPill
之前消耗完所有消息后终止 ShardRegion
及其子 actor,我的分片子 actor 具有需要完成的内部状态和目的。我需要一种优雅的方式来使用 ShardRegion
慢慢降级进程,让中间的任何会话完成,例如任何具有不同 EntityId
的新消息都将发送到其他地方。
我还没有找到任何方法来降级它,或者只是简单地停止任何新的分片 AkkaActor 来支持 ShardRegion.Is 这甚至可以在 Akka Cluster ShardRegion 中实现?
您可以通过指定自定义 stopMessage
来完成其中的一部分。当要钝化或重新平衡实体参与者时,分片区域会将此命令发送给实体参与者。默认值为 PoisonPill
,但自定义的允许实体参与者做任何他们需要做的事情来关闭(在这种情况下他们确实需要最终停止自己)。
如果您触发重新平衡,发送到分片的消息将被缓冲,直到该分片中的所有活动实体都停止为止,这可能符合“任何具有不同实体 ID 的新消息将被发送到其他地方” .请注意,在集群分片之外(即直接在实体参与者之间)发送的消息仍将正常传递(直到所述实体参与者停止)。