写点什么

Dubbo 框架学习笔记八

作者:风翱
  • 2021 年 12 月 21 日
  • 本文字数:586 字

    阅读完需:约 2 分钟

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 类型):所有成功调用中最长的耗时。

发布于: 1 小时前阅读数: 4
用户头像

风翱

关注

还未添加个人签名 2017.11.24 加入

勇于尝试,持续成长

评论

发布
暂无评论
Dubbo框架学习笔记八