先给急着用的人:项目地址:https://github.com/zhuzhenke/invoke-limit-api
针对调用亚马逊AWS服务,对于亚马逊针对每个接口有不同的频率调用限制,设计了这个对调用者可以同步和异步调用的sdk框架,把因为频率限制的错误进行重试的封装,调用调用者处理因频率限制出现的错误。
这里主要基于xMemcachedClient开源项目的一些设计优点,结合现有业务难点设计的基于线程池封装的sdk。
amazonRequest是一个正常的亚马逊请求,这个请求如果不走上面的框架调用,在一定时间内超过亚马逊AWS关于当前API调用量的话,就会报Request is throttled之类的异常,那么对于一个部门来说,如果是多个项目都会调用接口,且没有统一合理控制的话,那么这种情况肯定是会经常发生的。下面详细讲,如果使用上图的架构设计,解决这样的问题。
首先我们建立了一个频率统一控制中心的项目,这个跟sdk封装是没有关系的,但是sdk在真正发出请求时,需要对于amazonRequest,需要获取当前请求的执行时间,有可能是马上就能执行,有可能是还需要等几秒才能执行,因为可能是其他业务线的请求先来了好几个,占用了这个用户的这个请求。获取到amazonRequest的执行时间,封装成RequestCommand,同时用CountDownLatch来控