linux - 在 Linux 容器上的 dotnet Core 中实现消息消费者

标签 linux docker kubernetes .net-core architecture

我正在寻求实现将部署在 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

示例项目: https://github.com/aspnet/AspNetCore.Docs/tree/master/aspnetcore/fundamentals/host/generic-host/samples/2.x/GenericHostSample

祝你好运。

关于linux - 在 Linux 容器上的 dotnet Core 中实现消息消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56575023/

相关文章:

linux - 下载最新二进制文件后出现错误 `make` erlang

linux - 如何将命令从 Shell 脚本传递到命令行

nginx - 使用 nginx proxy_pass 在本地主机上进行 docker 注册表

docker - 在为phpRedisAdmin运行docker-compose.yml时发生错误

kubernetes - 避免在 Kubernetes 中为一个 cron 执行点运行多个 cron 作业

c# - 我使用什么命令通过 ftps 连接更改文件权限?

linux - Bash 数组不接受通配符

docker - pdf2htmlEX无法打开或读取文件

kubernetes - ImagePullSecrets GCR

kubernetes - 在 kubernetes pod 中执行多个命令(或从 shell 脚本)