确定有状态副本在服务结构中的角色

Determine role of stateful replica in service fabric

我在 Service Fabric 中有一个具有多个分区和副本的有状态服务。我对其进行了配置,以便 Primary 和 ActiveSecondary 副本都公开其端点。目的是让我可以利用辅助副本进行读取操作。

我遇到的问题是,在服务内部,我希望能够分辨出它是主服务还是 ActiveSecondary,因为对于次要副本,某些共享默认代码不需要 运行。 (因为将默认值插入到 ReliableStateManager 会抛出辅助对象。)

我可以在 运行 时确定副本角色吗?

您可以覆盖 OnChangeRoleAsync 并检查 ReplicaRole 参数。注意:

  • 角色可以在服务的生命周期内发生变化(例如从次要提升为主要)
  • RunAsync 仅在主副本上执行(如果角色更改将被取消)- 因此您可以安全地将初始化代码放在那里
  • 对于更高级的场景,您还可以查看PartitionReadStatusWriteStatus