【发布时间】:2018-08-13 19:44:38
【问题描述】:
我正在尝试实现一个基于 ASP.NET Core 的 Web 服务,该服务将通过 ARM 模板和适用于 .NET 的 Azure SDK 部署 Azure 资源。
问题是,根据我的测试,一些操作最多可能需要三到四分钟才能完成。我没有设计需要这么长时间才能完成某事的 API 的经验。
所以我想做的事情如下。
- 当 API get 请求提供资源时,我将请求信息放入队列中。
- 我返回一个带有票号的 200,让调用者监控进度,调用者可以通过调用另一个端点来监控进度。
- 我使用网络作业创建资源请求,并更新数据库中的信息。
- 当调用者调用端点以获取有关资源部署进度的反馈时,我现在可以提供更新的信息(成功或失败)。
我不确定这种架构,因为我以前从未做过类似的事情。我正在考虑使用 Azure 队列来组织传入的请求,使用 Azure 表在进行部署时放置有关请求的信息,并在创建请求时使用 Azure WebJobs。
这是一个足够体面的架构还是我应该考虑使用其他技术或模式来做到这一点?我不确定如何处理这种情况,欢迎提出任何意见。
【问题讨论】:
-
2) 改为返回
202 Accepted,以明确表示“嘿,我有你的东西,我稍后再处理”。代替票号,返回带有结果的Location标头,如果您对客户端何时应该“回电”有一个粗略的想法,请添加Retry-after标头。客户端,当 Location 不再返回 404 时,它应该尝试渲染结果或启动处理这些结果的任何逻辑。
标签: .net api azure architecture