首页 > 解决方案 > 如果我不关闭服务总线队列客户端并且进程停止怎么办?

问题描述

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

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

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

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

标签: asp.net-corekubernetes.net-coreazureservicebusazure-aks

解决方案


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

这是一篇博客文章,其中介绍了通过在 Kestrel 服务器的上下文中实现IApplicationLifetime来挂钩 TERM 信号的一些基础知识。

本文有一个IApplicationLifetime 简单实现的完整端到端示例。

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


推荐阅读