LeastActiveLoadBalance:并发
样例 3
摘抄dubbo手册上的配置
<dubbo:service interface="com.foo.BarService" actives="10" />高并发
<dubbo:reference interface="com.foo.BarService" actives="10" />
此时启用了ActiveLimitFilter,另外也能够直接配置filter,启用了ActiveLimitFilter。url
<dubbo:reference id="demoService" check="false" interface="com.alibaba.dubbo.demo.DemoService" filter="activelimit"/>
处理逻辑是先判断actives的计数,code
ActiveLimitFilter是客户端过滤器,使用LeastActiveLoadBalance,同时启用ActiveLimitFilter,才能为调用计数,看源码就是调用前加1,调用结果返回后减1,使用高并发自增类AtomicInteger源码
@Activate(group = Constants.CONSUMER, value = Constants.ACTIVES_KEY)it
long begin = System.currentTimeMillis(); RpcStatus.beginCount(url, methodName); try { Result result = invoker.invoke(invocation); RpcStatus.endCount(url, methodName, System.currentTimeMillis() - begin, true); return result; } catch (RuntimeException t) { RpcStatus.endCount(url, methodName, System.currentTimeMillis() - begin, false); throw t; }
执行beginCount 后,原子计数加1io
结果返回ast
结果返回后,执行减一,观察以下:配置