[英]ASP.NET Web API - Multiple Long-Running API calls best practices?
我正在寻找实现以下场景的最佳实践——我已经有一些解决方案(未实现),但我想确保它,这就是我在这里分享情况的原因。
设想
我有一个ASP.NET Web API (netcore)
应用程序,它应该返回一个复杂的数据结构,格式为json
。 我们称之为WebAPI.NumberOne
。 这个 API 在内部需要调用另一个API
端点来完成主要工作,这意味着,使用具有Task.WaitAll
的async
await
模式调用22
外部 API,以确保所有external APIs
都已完成工作,然后,对每个响应进行一些处理,例如将响应解析为结果类型,最后将结果返回给WebAPI.NumberOne
。 我想调用第二个WebAPI.NumberTwo
。
限制
我们目前无法简化WebAPI.NumberTwo
,它必须自己完成所有这些繁重的工作。 而且,我们的客户不希望在项目中引入任何新技术,例如任何消息队列平台。
问题:
我担心从WebAPI.NumberOne
接收超时,因为另一个 API 有时需要 10 分钟才能完成这项工作。 可能还有一些我现在不知道的潜在风险。
我的想法
Web Hook Receiver and Listener
,以便当WebAPI.NumberTwo
完成其工作以将结果发布到接收器,另一方面,侦听WebAPI.NumberOne
POST
那么,如上所述,这种情况下通常的最佳实践是什么? 我更热衷于了解不同的方法和最佳实践,即使我上面提到的限制如何。 感谢您的时间和帮助。
我们所做的是使用 rabbitmq 和 masstransit 实现排队(尽管这对您的客户来说是一项新技术)。
所有 api 调用所做的就是排队一条消息并返回 200 ok。
然后消息消费者调用处理繁重工作的函数。
为了集成其他 api,我们发布一个事件,然后其他 api 消费者可以处理该消息。
鉴于这篇文章中的标签,您可能已经拥有可用的 azure 队列或至少 msmq。
使用您的 webhook 提案,如果出现中断或单个组件需要更新会发生什么? 使用队列,消息就在那里,直到它被消耗掉。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.