Dubbo 框架学习笔记八
Dubbo 框架学习之 ActiveLimitFilter。
ActiveLimitFilter 是 Consumer 端用于限制一个 Consumer 对于一个服务端方法的并发调用量,也可以称为“客户端限流”。
从 ActiveLimitFilter.invoke() 方法的代码中可以看到,其核心实现与 RpcStatus 对象密切相关。RpcStatus 中维护了两个集合,分别是:
SERVICE_STATISTICS 集合(ConcurrentMap<String, RpcStatus> 类型),这个集合记录了当前 Consumer 调用每个服务的状态信息,其中 Key 是 URL,Value 是对应的 RpcStatus 对象;
METHOD_STATISTICS 集合(ConcurrentMap<String, ConcurrentMap<String, RpcStatus>> 类型),这个集合记录了当前 Consumer 调用每个服务方法的状态信息,其中第一层 Key 是 URL ,第二层 Key 是方法名称,第三层是对应的 RpcStatus 对象。
RpcStatus 中统计了很多调用相关的信息,核心字段有如下几个。
active(AtomicInteger 类型):当前并发度。这也是 ActiveLimitFilter 中关注的并发度。
total(AtomicLong 类型):调用的总数。
failed(AtomicInteger 类型):失败的调用数。
totalElapsed(AtomicLong 类型):所有调用的总耗时。
failedElapsed(AtomicLong 类型):所有失败调用的总耗时。
maxElapsed(AtomicLong 类型):所有调用中最长的耗时。
failedMaxElapsed(AtomicLong 类型):所有失败调用中最长的耗时。
succeededMaxElapsed(AtomicLong 类型):所有成功调用中最长的耗时。
版权声明: 本文为 InfoQ 作者【风翱】的原创文章。
原文链接:【http://xie.infoq.cn/article/cc379a6e2b37bb1b48111cbfa】。文章转载请联系作者。
评论