我正在寻求实现将部署在 Linux kubernetes 集群上的服务。它将使用和处理队列中的消息。
我的问题是,今天在 dotnet core 中实现 worker 的推荐和常规方法是什么? ASPNET 应用程序中的后台任务似乎有点矫枉过正,因为我不需要为 Web 请求提供服务。一些研究使我认为构建 IHost
和自定义 IHostedService
的控制台应用程序可以完成这项工作。我对这种情况下没有示例感到惊讶,尽管这让我想知道我是否缺少更标准的方法来实现它?
最佳答案
使用“简单”的控制台应用程序,通过在最后一行代码添加 Console.ReadLine() 显然行不通,因为在 K8s 中运行时没有输入流。
推荐的实现方法是使用 Host Builder。
正如您提到的,WebHost 适用于 web 应用程序,但对于通常不需要 Web 功能的所有其他类型的应用程序,还有一个通用的主机构建器。
虽然乍一看它似乎有点“矫枉过正”——但事实并非如此。 当计划在 Kubernetes 上运行时,您必须考虑除快乐路径之外的其他路径。 例如,允许 K8s 向您发送信号到终端(处理 SIGTERM),以防该部署发生缩减事件,或者节点耗尽——为了正常关闭——这在使用 HostBuilder 时是开箱即用的。 此外,您将能够享受其他内置功能,例如从文件自动重新加载设置(将 ConfigMap 挂载到文件时效果很好)
文档: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-2.2
祝你好运。
关于linux - 在 Linux 容器上的 dotnet Core 中实现消息消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56575023/