commit
a3c79b1111
@ -16,8 +16,11 @@ public class TestClient {
|
||||
public static void main(String[] args) throws InterruptedException {
|
||||
ClientProxy clientProxy=new ClientProxy();
|
||||
UserService proxy=clientProxy.getProxy(UserService.class);
|
||||
for(int i = 0; i < 15; i++) {
|
||||
for(int i = 0; i < 120; i++) {
|
||||
Integer i1 = i;
|
||||
if (i%30==0) {
|
||||
Thread.sleep(10000);
|
||||
}
|
||||
new Thread(()->{
|
||||
try{
|
||||
User user = proxy.getUserByUserId(i1);
|
||||
|
||||
@ -30,6 +30,7 @@ public class CircuitBreaker {
|
||||
//查看当前熔断器是否允许请求通过
|
||||
public synchronized boolean allowRequest() {
|
||||
long currentTime = System.currentTimeMillis();
|
||||
System.out.println("熔断swtich之前!!!!!!!+failureNum=="+failureCount);
|
||||
switch (state) {
|
||||
case OPEN:
|
||||
if (currentTime - lastFailureTime > retryTimePeriod) {
|
||||
@ -37,6 +38,7 @@ public class CircuitBreaker {
|
||||
resetCounts();
|
||||
return true;
|
||||
}
|
||||
System.out.println("熔断生效!!!!!!!");
|
||||
return false;
|
||||
case HALF_OPEN:
|
||||
requestCount.incrementAndGet();
|
||||
@ -61,6 +63,7 @@ public class CircuitBreaker {
|
||||
//记录失败
|
||||
public synchronized void recordFailure() {
|
||||
failureCount.incrementAndGet();
|
||||
System.out.println("记录失败!!!!!!!失败次数"+failureCount);
|
||||
lastFailureTime = System.currentTimeMillis();
|
||||
if (state == CircuitBreakerState.HALF_OPEN) {
|
||||
state = CircuitBreakerState.OPEN;
|
||||
|
||||
@ -11,12 +11,14 @@ import java.util.Map;
|
||||
public class CircuitBreakerProvider {
|
||||
private Map<String,CircuitBreaker> circuitBreakerMap=new HashMap<>();
|
||||
|
||||
public CircuitBreaker getCircuitBreaker(String serviceName){
|
||||
public synchronized CircuitBreaker getCircuitBreaker(String serviceName){
|
||||
CircuitBreaker circuitBreaker;
|
||||
if(circuitBreakerMap.containsKey(serviceName)){
|
||||
circuitBreaker=circuitBreakerMap.get(serviceName);
|
||||
}else {
|
||||
circuitBreaker=new CircuitBreaker(3,0.5,10000);
|
||||
System.out.println("serviceName="+serviceName+"创建一个新的熔断器");
|
||||
circuitBreaker=new CircuitBreaker(1,0.5,10000);
|
||||
circuitBreakerMap.put(serviceName,circuitBreaker);
|
||||
}
|
||||
return circuitBreaker;
|
||||
}
|
||||
|
||||
@ -52,7 +52,7 @@ public class ClientProxy implements InvocationHandler {
|
||||
//后续添加逻辑:为保持幂等性,只对白名单上的服务进行重试
|
||||
if (serviceCenter.checkRetry(request.getInterfaceName())){
|
||||
//调用retry框架进行重试操作
|
||||
response=new guavaRetry().sendServiceWithRetry(request,rpcClient);
|
||||
response = new guavaRetry().sendServiceWithRetry(request, rpcClient);
|
||||
}else {
|
||||
//只调用一次
|
||||
response= rpcClient.sendRequest(request);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user