API 管理高级策略 - 将并发限制为 1
Posted
技术标签:
【中文标题】API 管理高级策略 - 将并发限制为 1【英文标题】:API Management advanced policies - Limit concurrency to 1 【发布时间】:2020-07-30 11:04:59 【问题描述】:我在 Azure API 管理中有一个包含多个操作的 API。其中一项操作的限制执行并发性应为 1。我尝试使用以下后端策略来限制并行执行,就像 Microsoft Docs 中解释的那样。
<backend>
<limit-concurrency key="general" max-count="1">
<forward-request timeout="120" />
</limit-concurrency>
</backend>
https://docs.microsoft.com/en-us/azure/api-management/api-management-advanced-policies#LimitConcurrency
不幸的是,这个限制的行为是我可以同时执行两次操作。第三次并行执行导致 429 状态码。
有人知道为什么最大计数为 1 会导致最大计数为 2?
【问题讨论】:
您必须使用 DB 或队列来实现它。 【参考方案1】:使用并发控制,我们可以保证后端系统的并发调用不超过 2 个,并且之后的所有调用都排队到最大限制,并在 2 个并发调用之一完成时立即处理。确保不在重试和空闲时间上浪费资源。使用并发控制很简单,这里的策略是:
<limit-concurrency key="general" max-count="1" timeout="120" max-queue-length="100">
<forward-request timeout="120" />
</limit-concurrency>
更多详情可以参考这个article。
【讨论】:
是的,正如我所写,我知道这种可能性。但不幸的是,我的后端服务无法处理 2 个并发调用。所以我需要确保它只接收 1 个并发呼叫。如果我将 max-count 设置为 1,它的行为就像设置为 2...以上是关于API 管理高级策略 - 将并发限制为 1的主要内容,如果未能解决你的问题,请参考以下文章
Linux 第15天: (08月29日) Linux高级文件系统管理