当前位置: 首页 > news >正文

杭州建设网站公司小程序制作一个需要多少钱

杭州建设网站公司,小程序制作一个需要多少钱,相册管理网站模板下载失败,鹤壁市城乡一体化外部服务或API可能有使用限制#xff0c;或者它们不能失败就无法处理大量请求。 这篇文章解释了如何创建一个基于Spring Framework的方面#xff0c;该方面可以用来限制使用Guava速率限制器的任何建议方法调用。 以下实现需要Java 8#xff0c;Spring AOP和Guava。 让我们从… 外部服务或API可能有使用限制或者它们不能失败就无法处理大量请求。 这篇文章解释了如何创建一个基于Spring Framework的方面该方面可以用来限制使用Guava速率限制器的任何建议方法调用。 以下实现需要Java 8Spring AOP和Guava。 让我们从注释开始该注释用于建议任何启用Spring AOP的方法调用。 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface RateLimit {/*** return rate limit in queries per second*/int value();/*** return rate limiter identifier (optional)*/String key() default ;} 注释定义了两件事每秒查询或许可中的速率限制以及标识速率限制器的可选键。 如果密钥相等则多种方法可以使用相同的速率限制器。 例如当使用来自不同方法的不同参数调用API时每秒所需的总查询次数将不会超过。 接下来是实际的节流方面它是作为Spring Framework组件实现的。 无论有没有Spring框架在任何情况下都可以使用方面。 Aspect Component public class RateLimiterAspect {public interface KeyFactory {String createKey(JoinPoint jp, RateLimit limit);}private static final Logger LOGGER LoggerFactory.getLogger(RateLimiterAspect.class);private static final KeyFactory DEFAULT_KEY_FACTORY (jp, limit) - JoinPointToStringHelper.toString(jp);private final ConcurrentHashMapString, RateLimiter limiters;private final KeyFactory keyFactory;Autowiredpublic RateLimiterAspect(OptionalKeyFactory keyFactory) {this.limiters new ConcurrentHashMap();this.keyFactory keyFactory.orElse(DEFAULT_KEY_FACTORY);}Before(annotation(limit))public void rateLimit(JoinPoint jp, RateLimit limit) {String key createKey(jp, limit);RateLimiter limiter limiters.computeIfAbsent(key, createLimiter(limit));double delay limiter.acquire();LOGGER.debug(Acquired rate limit permission ({} qps) for {} in {} seconds, limiter.getRate(), key, delay);}private FunctionString, RateLimiter createLimiter(RateLimit limit) {return name - RateLimiter.create(limit.value());}private String createKey(JoinPoint jp, RateLimit limit) {return Optional.ofNullable(Strings.emptyToNull(limit.key())).orElseGet(() - keyFactory.createKey(jp, limit));} } 该类定义了密钥工厂的附加接口和默认实现如果注释未为速率限制器提供显式密钥则使用该默认工厂。 密钥工厂可以使用连接点基本上是方法调用和提供的注释为速率限制器创建合适的密钥。 该方面还使用并发哈希图来存储速率限制器实例。 方面被定义为单例但是可以从多个线程调用rateLimit方法因此并发哈希图确保我们为每个唯一键仅分配单个速率限制器。 方面的构造器注入利用了Spring Framework的可选注入支持。 如果在上下文中未定义KeyFactory bean则使用默认的密钥工厂。 该类使用Aspect和Component进行注释以便Spring理解已定义的方面并启用Before建议。 Before通知仅包含一个切入点该切入点需要RateLimit批注并将其绑定到方法的limit参数。 节流的实现非常简单。 首先为速率限制器创建一个密钥。 然后使用密钥查找或创建限制器最后获取限制器以获取许可。 速率限制器密钥创建中有一个小陷阱。 注释定义的键将转换为可选键但由于性能原因不能使用可选键的orElse方法。 可选的orElse方法采用一个在任何情况下无论是否存在可选的值。 另一方面另一种方法或orElseGet使用了供应商该供应商仅当不存在可选值时才允许懒惰地评估值。 密钥工厂的createKey可能是一项昂贵的操作因此使用供应商版本。 并发哈希图包含一个方便的方法computeIfAbsent 该方法自动基于键和已定义的函数查找或创建一个值。 这允许对映射值进行简单明了的延迟初始化。 速率限制器是按需创建的并且保证每个唯一的限制器密钥只有一个实例。 默认的密钥工厂实现使用JoinPointToStringHelper中的帮助程序方法将连接点转换为文本表示形式。 public class JoinPointToStringHelper {public static String toString(JoinPoint jp) {StringBuilder sb new StringBuilder();appendType(sb, getType(jp));Signature signature jp.getSignature();if (signature instanceof MethodSignature) {MethodSignature ms (MethodSignature) signature;sb.append(#);sb.append(ms.getMethod().getName());sb.append(();appendTypes(sb, ms.getMethod().getParameterTypes());sb.append());}return sb.toString();}private static Class? getType(JoinPoint jp) {return Optional.ofNullable(jp.getSourceLocation()).map(SourceLocation::getWithinType).orElse(jp.getSignature().getDeclaringType());}private static void appendTypes(StringBuilder sb, Class?[] types) {for (int size types.length, i 0; i size; i) {appendType(sb, types[i]);if (i size - 1) {sb.append(,);}}}private static void appendType(StringBuilder sb, Class? type) {if (type.isArray()) {appendType(sb, type.getComponentType());sb.append([]);} else {sb.append(type.getName());}} } 最后只需添加RateLimit批注即可将限制应用于任何启用Spring的方法。 Service public class MyService {...RateLimit(5)public String callExternalApi() {return restTemplate.getForEntity(url, String.class).getBody();}} 有人可能想知道这种解决方案能否很好地扩展 不实际上不是。 Guava的速率限制器会阻止当前线程因此如果对受限制的服务进行异步调用则大量线程将被阻止并可能导致空闲线程耗尽。 如果在多个应用程序或JVM实例中复制服务则会引起另一个问题。 没有限制器速率的全局同步。 对于驻留在单个JVM中的单个应用程序以及节流方法的适当负载此实现效果很好。 进一步阅读 使用Spring进行面向方面的编程 番石榴RateLimiter RateLimiter –发现Google Guava 有序Java多通道异步节流器 节流演员信息 翻译自: https://www.javacodegeeks.com/2015/07/throttle-methods-with-spring-aop-and-guava-rate-limiter.html
http://www.yutouwan.com/news/483484/

相关文章:

  • 阿克苏网站开发怎样做信息收费网站
  • 服务一流的做网站佛山模板建站哪家好
  • 做英文行程的网站个人建设网站服务器怎么解决
  • 天津网站建设开发有哪些网站建设公司名片
  • 做网站容易还是做小程序容易装修合同范本最新版
  • 网络公司如何建网站如何为自己的店铺做网站
  • 一个网站怎么做聚合广州越秀区酒店
  • 咸宁网站建设价格开发一个资金盘app多少钱
  • 国外网站打不开怎么解决网站是用什么做的
  • 株洲网站制作公司在哪里app网站开发成功案例
  • 有空间与域名 怎么做网站郑州北环附近网站建设
  • 网站外包后呗百度降权汉中网站seo
  • 网站地址和网页地址区别二建报考条件
  • 盘锦网站制作wordpress双栏主题开源
  • 小企业建站系统网站设计有哪些
  • 浙江坤宇建设有限公司网站广州营销型网站建设公司哪家名气大
  • 报价网站制作wordpress 注册 用户名
  • 正则表达式匹配网站Zillah wordpress
  • 南宁公司网站模板建站网页设计找工作
  • 黄平网站制作WordPress搭建點播流媒體
  • 无忧建站深圳工程建设服务网
  • 企业网站免费建站seo软件简单易排名稳定
  • 联兴建设官方网站有什么网站可以免费建站免费建网站
  • 济南网站制作公司哪家技术好华夏名网网站建设
  • 网站开发公司开发过程江苏炒股配资网站开发
  • 西安网站建设那家强做网站导航用什么开元程序
  • 建设机械网站策划郑州手机网站制作公司哪家好
  • 濮阳公司网站建设企业品牌网站建设绿d茶
  • 一个商城网站开发周期如何给网站划分栏目
  • 利川市网站建设女生学数字媒体技术难吗