我已使用以下代码
应用了配额政策<Quota async="false" continueOnError="false" enabled="true" name="Quota-1">
<DisplayName>Quota 1</DisplayName>
<Allow count="2"/>
<Interval>1</Interval>
<Distributed>true</Distributed>
<Synchronous>false</Synchronous>
<TimeUnit>minute</TimeUnit>
<Identifier ref="request.queryparam.id"/>
<AsynchronousConfiguration>
<SyncIntervalInSeconds>1</SyncIntervalInSeconds>
<SyncMessageCount>5</SyncMessageCount>
</AsynchronousConfiguration>
</Quota>
然后我通过使用重置计数策略和以下代码重置计数
<ResetQuota async="false" continueOnError="false" enabled="true" name="Reset-Quota-1">
<DisplayName>Reset Quota 1</DisplayName>
<Quota name="Quota-1">
<Identifier ref="request.queryparam.id">
<Allow>6</Allow>
</Identifier>
</Quota>
</ResetQuota>
据我所知,当我发出请求时,可用的计数需要为6,5,4,3,2,1,0
但它显示1,6,11,16,21,.....
在这种情况下,没有机会计算到0。
可能是错的。
提前致谢....
答案 0 :(得分:0)
我看到您通过将其设置为false来使用异步配额。您还有一个不正确的AsynchronousConfiguration,因为您的SyncMessageCount(5)大于您的允许计数(2)。
异步配置的真正含义是,配额计数器不会针对每个请求更新到后端,而是仅以每5秒的间隔更新,这有时会高于允许计数。这就是你遇到的问题,这就是为什么你看到计数增加了5到1,6,11,16,21等等。
您需要将同步间隔设置为小于允许计数。另请注意,异步配额不会给您100%的准确性,因为它只会定期在多个服务器上同步计数器而不是每个请求。