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
結果返回後,執行減一,觀察以下:配置