0
|
Code Monkey · 技术社区 · 6 年前 |
![]() |
1
0
有状态服务具有每个分区的主副本和辅助副本的概念。 这意味着,只有主服务器可以处理任何工作(读写操作),而次服务器用于复制主服务器中发生的状态更改。 在设置这些副本时,SF调用主接收以“ChangeRole”并将其设置为主副本,这将调用OpenAsync()以打开调用的侦听器并执行与该副本相关的任何工作。 当您升级或群集重新平衡您的服务时,它将再次调用ChangeRole以将主服务器降级为辅助服务器,这将取消取消令牌(您的服务在OpenAsync上收到),并关闭侦听器,您应该停止服务中发生的任何工作(如循环或阻塞操作),如果OnChangeRoleAsync在您的服务上被覆盖,也会调用它。 这种情况下的常见错误是,代码没有监听令牌取消或执行角色更改以停止任何挂起的工作,这将导致服务挂起角色更改,从而导致这些失败。
有关更多信息,请查看此文档: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-services-lifecycle#stateful-service-startup |