跨消息处理器(MPs)的Apigee同步
我们的组织目前正在迁移到Apigee 我目前的问题与此非常相似,但由于我是一名StackOverflow新手,声誉很低,因此我无法对此发表评论: 如果有任何方法可以合并这两个问题,请让我知道 因此,在我们的组织中,我们有6个MessageProcessor(MP),我认为他们是以严格的循环方式工作的 请参阅此配置(它应用于ApiProxy的目标端点):跨消息处理器(MPs)的Apigee同步,api,backend,apigee,throttling,Api,Backend,Apigee,Throttling,我们的组织目前正在迁移到Apigee 我目前的问题与此非常相似,但由于我是一名StackOverflow新手,声誉很低,因此我无法对此发表评论: 如果有任何方法可以合并这两个问题,请让我知道 因此,在我们的组织中,我们有6个MessageProcessor(MP),我认为他们是以严格的循环方式工作的 请参阅此配置(它应用于ApiProxy的目标端点): Spike-1 下午三点 我有一个下午3点的比率,这意味着每20秒命中一次,根据 问题是,不是每20秒成功命中1次,而是在20秒范围内成功命
Spike-1
下午三点
我有一个下午3点的比率,这意味着每20秒命中一次,根据
问题是,不是每20秒成功命中1次,而是在20秒范围内成功命中6次,然后出现防刺错误,这意味着它以循环方式命中每个MP。
这意味着我的api后端每20秒命中6次,而不是期望的每20秒命中1次。
有没有办法在MPs之间同步峰值逮捕?
ConcurrentRatelimit似乎没有帮助
非常感谢您的任何帮助或建议
谢谢 与配额限制不同,峰值停止不能跨MP同步 但是,当您将它们设置为每分钟级别时,您可以改用配额策略——然后将其设置为分布式和同步,它将跨MP进行协调
请记住,机器之间的同步总是会有一些延迟,因此它永远不会是一个完全精确的数字 SpikeRestrip无法跨消息处理器分发。它通常用于阻止流量的大爆发,而不是控制您建议的流量水平(每分钟3次呼叫)。您通常将其放入代理请求预流中,如果流量过高,则中止 通过循环消息处理器使用SpikeRestart,最接近每分钟3次,即每分钟1次,这将导致每分钟6次呼叫。您只能将SpikeArrests指定为“n/s”或“n/min”,它会转换为“1/1/n秒”或“1/1/n分钟”,正如您上面提到的那样 你真的只支持在你的后端每20秒打一个电话吗?如果您尝试为每个用户或应用程序每20秒支持一次呼叫,那么我建议您尝试使用。配额可以在所有消息处理器之间共享一个计数器。通过指定一个常量配额标识符,您还可以对所有流量(而不是每个用户或每个应用程序)使用配额。你可以允许每分钟3次,但他们可以在这一分钟内同时进来 如果您只是想防止后端负担过重,通常会使用 最后一个解决方案是实现一些自定义代码
更新以解决进一步的问题: 重申:
- 6个消息处理器处理循环
- 希望4个应用每秒允许5次呼叫
- 希望其余的应用每秒共享10个电话
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SpikeArrest async="false" continueOnError="false" enabled="true" name="spikearrest-1">
<DisplayName>SpikeArrest-1</DisplayName>
<FaultRules/>
<Properties/>
<Identifier ref="request.header.some-header-name"/>
<MessageWeight ref="request.header.weight"/>
<Rate>3pm</Rate>
</SpikeArrest>