如果我不关闭 Service Bus Queue Client 并且进程停止怎么办?

What if I don't close Service Bus Queue Client and the process stops?

我正在尝试部署一个永无止境的消息泵来处理服务总线队列消息,作为 Azure AKS Kubernetes 上的 .NET Core 控制台应用程序。

该应用程序将根据队列中的消息数量自动缩放,因此可以部署更多应用程序,启动时它们将连接到服务总线并启动 RegisterMessageHandler。

自动缩放器也可能会拆除应用程序,但如果没有事件向控制台应用程序发出关闭信号,我将无法正确关闭队列以停止接收消息或停止处理消息。

如何在 AKS 上的 .NET Core 中处理这一问题?

Pod 关闭时有两个信号可用。 PreStop hook 可以配置为触发 shell 命令或针对您的容器生成 HTTP 请求。您还应该期望您的 运行 进程在 pod 停止之前接收到 TERM 信号。

这是 Kestrel 服务器上下文中的 blog post which covers some basics on hooking the TERM signal by implementing IApplicationLifetime

本文有一个 simple implementation of IApplicationLifetime.

的完整端到端示例

对于 .NET 3.x,IHostApplicationLifetime 取代 IApplicationLifetime。