在后台处理请求

时间:2019-12-22 04:00:53

标签: asp.net database

我正在使用ASP.Net Core和Microsoft SQL Server编写REST API。我的要求之一是,客户端将向该API POST注入某些数据,并且该API必须在使用或读取之前以某种方式转换/处理该数据。事实证明,这种处理是昂贵的。因此,我正在考虑在后台异步执行此操作,而不会阻止POST请求。我正在考虑进行处理:

  • 在计划的SQL作业中
  • 使用在后台运行的单独Windows服务,该服务从数据库读取,进行处理并将其写回。它将比我假定的SQL作业慢,但是代码将更具可读性。
  • 使用Hangfire。没用过。不确定效果如何。

什么是最佳选择?围绕这种事情是否有最佳实践?

3 个答案:

答案 0 :(得分:1)

样板

  • 将数据存储在某个地方(RDBMS,nonSQL等)
  • 回复用户其数据已安排处理
  • 请一些工人或工人池进行工作处理
  • 将结果存储在某个地方
  • 通知客户端后台作业已完成(可以只是客户端可以检查的GET /jobs/id端点
  • 显示结果

您可以使用自己的守护程序,进程,脚本。如果这还不够,并且您需要更多功能,请使用看起来不错的Hangfire。

答案 1 :(得分:1)

我在生产环境中使用hangfire已有将近3年的时间,是的,这是一种很棒的方法,可以从UI仪表板开箱即用地重试策略,但是其他选项可以像这样:

  • 无服务器(Azure函数,AWS Lambda)
  • AWS SQS或Azure队列+托管服务docs

答案 2 :(得分:0)

我发现的另一个选择是实现IHostedService,这是ASP.Net Core中的内置接口。有关详细信息,请参见this page