Service Fabric 中的 Stateless Worker 服务在同一进程中重新启动
Posted
技术标签:
【中文标题】Service Fabric 中的 Stateless Worker 服务在同一进程中重新启动【英文标题】:Stateless Worker service in Service Fabric restarted in the same process 【发布时间】:2021-11-03 05:29:59 【问题描述】:我有一个无状态服务,它从 Azure 队列中提取消息并对其进行处理。该服务还启动一些负责清理操作的线程。我们最近遇到了一个问题,这些线程在理想情况下应该在服务关闭时被终止继续保持活动状态(肯定是我们的服务关闭过程中的一个错误)。
进一步查看日志,似乎 RunAsync
方法取消令牌收到了取消请求,随后在 同一进程 中注册了 @987654323 中的无状态服务的新实例@ 已创建。
在关闭当前实例后,Service Fabric 是否可以重复使用相同的进程来启动无状态服务的新实例。
服务结构文档https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-hosting-model 似乎确实建议可以在同一进程上托管不同的服务,但我找不到其中提到的上述行为。
【问题讨论】:
【参考方案1】:在共享进程模型中,每个节点上的每个ServicePackage
实例都有一个进程。添加或替换服务将重用现有流程。
这样做是为了节省运行服务的节点上的一些(进程级)开销,因此托管更具成本效益。此外,它还支持服务的端口共享。
您可以通过在应用程序清单中配置“独占进程”模式来更改此(默认)行为,这样每个副本/实例都将在单独的进程中运行。
<Service Name="VotingWeb" ServicePackageActivationMode="ExclusiveProcess">
正如您所提到的,您可以监视CancellationToken
以中止单独的工作线程,以便它们可以在服务停止时停止。
更多信息about the app model here 和 configuring process activation mode。
【讨论】:
以上是关于Service Fabric 中的 Stateless Worker 服务在同一进程中重新启动的主要内容,如果未能解决你的问题,请参考以下文章
Service Fabric 中的 actorevent 都有哪些限制?
Azure Service Fabric 中的 NodeType 和 ScaleSet 有啥区别
Azure Service Fabric 中的可扩展工作线程