asp.net 核心 2 网络 api 任务 运行 后台任务

asp.net core 2 web api task run background task

我现在正在处理一个应用程序。我的要求是我想在 elasticsearch 中插入数据而无需在控制器中等待。此插入过程 运行 在另一个后台线程中,无需在控制器中等待。控制器在 return 之前调用此进程,而不等待此进程响应用户数据。

谁能告诉我流程,我该如何管理这个架构

您的问题过于宽泛,但一般来说,您需要某种后台流程和一种安排相关工作的方法。在这方面,确实有无数的选择,但它们属于以下三个主要类别之一:

  1. IHostedService ASP.NET 核心。有 sample code for a queue-based hosted service 可能会满足您的需求。这可能是最简单的开始方式,但也是最不可靠的。特别是,如果您的应用程序停止,队列将随之停止,可能会导致丢失项目。

  2. Hangfire 这样的 third-party 工具。这是一个很好的 middle-of-the-road 方法。相对容易设置且相对有弹性。

  3. 消息队列,如 RabbitMQ。本质上,您将一条消息发送到队列,然后 "subscribers" 会在该队列上侦听特定消息类型并根据该类型采取行动。这设置起来有点复杂,但也比其他方法更有弹性。有一些方法可以确保消息传递,即使出现故障,您实际上可以让多个工作人员 round-robin 队列进行扩展。