Merge pull request #18 from GGBoooond/main

修复熔断失效的问题
This commit is contained in:
GG.Bond 2024-07-28 22:54:56 +08:00 committed by GitHub
commit a3c79b1111
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 12 additions and 4 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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;
}

View File

@ -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);