public class ProviderProtectedMessageRouter extends ProviderMessageRouter
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 ConcurrentMap<String,AtomicInteger> |
requestCounters |
protected AtomicInteger |
totalCounter |
methodCounter, providers| 构造器和说明 |
|---|
ProviderProtectedMessageRouter() |
ProviderProtectedMessageRouter(Provider<?> provider) |
| 限定符和类型 | 方法和说明 |
|---|---|
protected Response |
call(Request request,
Provider<?> provider) |
protected boolean |
isAllowRequest(int requestCounter,
int totalCounter,
int maxThread,
Request request) |
addProvider, getPublicMethodCount, handle, removeProviderprotected ConcurrentMap<String,AtomicInteger> requestCounters
protected AtomicInteger totalCounter
public ProviderProtectedMessageRouter()
public ProviderProtectedMessageRouter(Provider<?> provider)
Copyright © 2017. All rights reserved.