目錄二. 原始碼分析
三. 使用
原始碼說明:該類表示提供端服務介面(包括介面中所有服務方法)、消費端服務介面(包括介面中所有服務方法)的當前呼叫次數、總數、失敗數、呼叫間隔等狀態資訊
**中有詳細注釋,重點關注begincount方法、endcount方法
service_statistics/method_statistics是靜態變數,相當於快取
package org.apache.dubbo.rpc;
public class rpcstatus
/*** 根據 url 返回介面中服務方法的 rpcstatus 狀態
*/public static rpcstatus getstatus(url url, string methodname)
/*** 服務方法執行前判斷是否滿足併發控制要求
** @param url
* @param methodname 服務方法
* @param max 併發控制的數量
* @return false:併發數已達到,掛起當前執行緒,等待喚醒
* @return true: 併發數未達到,可以執行
*/public static boolean begincount(url url, string methodname, int max)
for (int i; ; )
// 併發數未達到,返回true
if (methodstatus.active.compareandset(i, i + 1))
}// 介面所有服務方法正在執行中的數量加1
return true;
}/**
* 服務方法執行後減少相關引數值(包括併發控制次數)
** @param url
* @param methodname
* @param elapsed
* @param succeeded
*/public static void endcount(url url, string methodname, long elapsed, boolean succeeded)
private static void endcount(rpcstatus status, long elapsed, boolean succeeded)
if (succeeded)
} else }}
}
原始碼說明:是服務提供端並且url有指定key(executes) filter才生效(@activate(group = commonconstants.provider, value = executes_key))
invoke:呼叫 rpcstatus.begincount 判斷是否滿足併發控制條件
rpcstatus.begincount返回false:直接拋異常。
onresponse/onerror:方法執行完成或發生異常則呼叫rpcstatus.endcount減去相應數量
package org.apache.dubbo.rpc.filter;
@activate(group = commonconstants.provider, value = executes_key)
public class executelimitfilter implements filter, filter.listener
invocation.put(execute_limit_filter_start_time, system.currenttimemillis());
try catch (throwable t) else }}
/*** 服務方法正常返回
** @param invoker
* @param invocation
*/@override
rpcstatus.endcount(invoker.geturl(), invocation.getmethodname(), getelapsed(invocation), true);
}/**
* 服務方法異常
** @param t
* @param invoker
* @param invocation
*/@override
public void onerror(throwable t, invoker<?> invoker, invocation invocation)
}rpcstatus.endcount(invoker.geturl(), invocation.getmethodname(), getelapsed(invocation), false);
}private long getelapsed(invocation invocation)
}
public static void main(string args) throws ioexception
Dubbo 服務提供方併發控制
二.原始碼分析 三.使用 原始碼說明 該類表示提供端服務介面 包括介面中所有服務方法 消費端服務介面 包括介面中所有服務方法 的當前呼叫次數 總數 失敗數 呼叫間隔等狀態資訊 中有詳細注釋,重點關注begincount方法 endcount方法 service statistics method s...
Dubbo 消費端服務併發控制
二.原始碼分析 三.使用 原始碼說明 該類表示提供端服務介面 包括介面中所有服務方法 消費端服務介面 包括介面中所有服務方法 的當前呼叫次數 總數 失敗數 呼叫間隔等狀態資訊 中有詳細注釋,重點關注begincount方法 endcount方法 service statistics method s...
Dubbo併發控制和連線控制
限制com.foo.barservice的每個方法,伺服器端併發執行 或占用執行緒池執行緒數 不能超過10個 限制com.foo.barservice的sayhello方法,伺服器端併發執行 或占用執行緒池執行緒數 不能超過10個 1.2.1.控制到介面所有方法 限制com.foo.barservi...