重置配额在apigee中没有按预期工作

时间:2014-12-01 07:13:13

标签: policy apigee quota

我已使用以下代码

应用了配额政策
<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。

可能是错的。

提前致谢....

1 个答案:

答案 0 :(得分:0)

我看到您通过将其设置为false来使用异步配额。您还有一个不正确的AsynchronousConfiguration,因为您的SyncMessageCount(5)大于您的允许计数(2)。

异步配置的真正含义是,配额计数器不会针对每个请求更新到后端,而是仅以每5秒的间隔更新,这有时会高于允许计数。这就是你遇到的问题,这就是为什么你看到计数增加了5到1,6,11,16,21等等。

您需要将同步间隔设置为小于允许计数。另请注意,异步配额不会给您100%的准确性,因为它只会定期在多个服务器上同步计数器而不是每个请求。