@SpiMeta(name="motan") public class DefaultProtectedStrategy extends Object implements ProviderProtectedStrategy, StatisticCallback
provider 消息处理分发:支持一定程度的自我防护
1) 如果接口只有一个方法,那么直接return true
2) 如果接口有多个方法,那么如果单个method超过 maxThread / 2 && totalCount > (maxThread * 3 / 4),那么return false;
3) 如果接口有多个方法(4个),同时总的请求数超过 maxThread * 3 / 4,同时该method的请求数超过 maxThead * 1 / 4, 那么return false
4) 其他场景return true
| 限定符和类型 | 字段和说明 |
|---|---|
protected AtomicInteger |
methodCounter |
protected AtomicInteger |
rejectCounter |
protected ConcurrentMap<String,AtomicInteger> |
rejectCounters |
protected ConcurrentMap<String,AtomicInteger> |
requestCounters |
protected AtomicInteger |
totalCounter |
| 构造器和说明 |
|---|
DefaultProtectedStrategy() |
| 限定符和类型 | 方法和说明 |
|---|---|
Response |
call(Request request,
Provider<?> provider) |
boolean |
isAllowRequest(int requestCounter,
int totalCounter,
int maxThread) |
void |
setMethodCounter(AtomicInteger methodCounter) |
String |
statisticCallback() |
protected ConcurrentMap<String,AtomicInteger> requestCounters
protected ConcurrentMap<String,AtomicInteger> rejectCounters
protected AtomicInteger totalCounter
protected AtomicInteger rejectCounter
protected AtomicInteger methodCounter
public void setMethodCounter(AtomicInteger methodCounter)
setMethodCounter 在接口中 ProviderProtectedStrategypublic Response call(Request request, Provider<?> provider)
call 在接口中 ProviderProtectedStrategypublic boolean isAllowRequest(int requestCounter,
int totalCounter,
int maxThread)
public String statisticCallback()
statisticCallback 在接口中 StatisticCallbackCopyright © 2023. All rights reserved.