diff --git a/fizz-bootstrap/pom.xml b/fizz-bootstrap/pom.xml index bc4a26d..ee1e037 100644 --- a/fizz-bootstrap/pom.xml +++ b/fizz-bootstrap/pom.xml @@ -20,7 +20,7 @@ Dragonfruit-SR3 Dysprosium-SR25 5.3.7.RELEASE - 4.1.73.Final + 4.1.74.Final 4.4.15 2.17.1 1.7.35 diff --git a/fizz-core/src/main/java/we/filter/FlowControlFilter.java b/fizz-core/src/main/java/we/filter/FlowControlFilter.java index 5f19d27..f12a42b 100644 --- a/fizz-core/src/main/java/we/filter/FlowControlFilter.java +++ b/fizz-core/src/main/java/we/filter/FlowControlFilter.java @@ -163,8 +163,10 @@ public class FlowControlFilter extends FizzWebFilter { } ServerHttpResponse resp = exchange.getResponse(); - resp.setStatusCode(HttpStatus.OK); - resp.getHeaders().add(HttpHeaders.CONTENT_TYPE, responseContentType); + resp.setStatusCode(HttpStatus.FORBIDDEN); + HttpHeaders headers = resp.getHeaders(); + headers.set(HttpHeaders.CONTENT_TYPE, responseContentType); + headers.set("traceId", traceId); return resp.writeWith(Mono.just(resp.bufferFactory().wrap(responseContent.getBytes()))); } else { diff --git a/fizz-core/src/main/java/we/service_registry/FizzServiceRegistration.java b/fizz-core/src/main/java/we/service_registry/FizzServiceRegistration.java index 2bbe5f6..0eef5ce 100644 --- a/fizz-core/src/main/java/we/service_registry/FizzServiceRegistration.java +++ b/fizz-core/src/main/java/we/service_registry/FizzServiceRegistration.java @@ -36,7 +36,7 @@ import java.util.Properties; public abstract class FizzServiceRegistration { - protected static final Logger log = LoggerFactory.getLogger(FizzServiceRegistration.class); + protected static final Logger LOGGER = LoggerFactory.getLogger(FizzServiceRegistration.class); public enum Type { EUREKA, NACOS; diff --git a/fizz-core/src/main/java/we/service_registry/eureka/FizzEurekaServiceRegistration.java b/fizz-core/src/main/java/we/service_registry/eureka/FizzEurekaServiceRegistration.java index 7520a4a..cfa4a81 100644 --- a/fizz-core/src/main/java/we/service_registry/eureka/FizzEurekaServiceRegistration.java +++ b/fizz-core/src/main/java/we/service_registry/eureka/FizzEurekaServiceRegistration.java @@ -22,7 +22,6 @@ import com.netflix.discovery.DiscoveryClient; import com.netflix.discovery.EurekaClientConfig; import com.netflix.discovery.shared.Application; import com.netflix.discovery.shared.Applications; -import org.apache.commons.lang3.StringUtils; import org.springframework.cloud.netflix.eureka.CloudEurekaClient; import org.springframework.cloud.netflix.eureka.EurekaClientConfigBean; import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration; @@ -42,9 +41,14 @@ public class FizzEurekaServiceRegistration extends FizzServiceRegistration { private final CloudEurekaClient client; + private final long renewalInterval; + + private long prevHeartbeatTimestamp = -1; + public FizzEurekaServiceRegistration(String id, EurekaRegistration registration, EurekaServiceRegistry serviceRegistry, CloudEurekaClient client) { super(id, Type.EUREKA, registration, serviceRegistry); this.client = client; + renewalInterval = this.client.getApplicationInfoManager().getInfo().getLeaseInfo().getRenewalIntervalInSecs() * 1000L; } public DiscoveryClient getDiscoveryClient() { @@ -102,8 +106,23 @@ public class FizzEurekaServiceRegistration extends FizzServiceRegistration { } } - String join = StringUtils.join(eurekaServerServiceUrls, ','); - throw Utils.runtimeExceptionWithoutStack("can't find any server with " + join); + long heartbeatTimestamp = client.getStats().lastSuccessfulHeartbeatTimestampMs(); + if (heartbeatTimestamp == -1) { + return transfrom(InstanceInfo.InstanceStatus.STARTING); + } + if (heartbeatTimestamp > prevHeartbeatTimestamp) { + prevHeartbeatTimestamp = heartbeatTimestamp; + return transfrom(InstanceInfo.InstanceStatus.UP); + } + long duration = prevHeartbeatTimestamp + renewalInterval; + if (System.currentTimeMillis() > duration) { + LOGGER.warn("unknown eureka {} status", getId()); + return transfrom(InstanceInfo.InstanceStatus.UNKNOWN); + } else { + return transfrom(InstanceInfo.InstanceStatus.UP); + } + // String join = StringUtils.join(eurekaServerServiceUrls, ','); + // throw Utils.runtimeExceptionWithoutStack("can't get eureka server instance status by " + join); } private ServerStatus transfrom(InstanceInfo.InstanceStatus status) { diff --git a/fizz-core/src/main/java/we/service_registry/nacos/FizzNacosServiceRegistration.java b/fizz-core/src/main/java/we/service_registry/nacos/FizzNacosServiceRegistration.java index 4e0fa51..3f6ccd6 100644 --- a/fizz-core/src/main/java/we/service_registry/nacos/FizzNacosServiceRegistration.java +++ b/fizz-core/src/main/java/we/service_registry/nacos/FizzNacosServiceRegistration.java @@ -81,7 +81,7 @@ public class FizzNacosServiceRegistration extends FizzServiceRegistration { return ServerStatus.DOWN; } else { - log.warn("{} status is {}", getId(), status); + LOGGER.warn("nacos {} status is {}", getId(), status); return ServerStatus.UNKNOWN; } } diff --git a/fizz-core/src/main/java/we/stats/circuitbreaker/CircuitBreakManager.java b/fizz-core/src/main/java/we/stats/circuitbreaker/CircuitBreakManager.java index d09e3c1..82feaf9 100644 --- a/fizz-core/src/main/java/we/stats/circuitbreaker/CircuitBreakManager.java +++ b/fizz-core/src/main/java/we/stats/circuitbreaker/CircuitBreakManager.java @@ -151,12 +151,12 @@ public class CircuitBreakManager { // updateParentResourceMap(cb); // LOGGER.info("update parentResourceMap: {}", parentResourceMap); if (cb.type == CircuitBreaker.Type.SERVICE_DEFAULT) { - if (cb.isDeleted || !cb.serviceDefaultEnable) { + // if (cb.isDeleted || !cb.serviceDefaultEnable) { for (String resource : circuitBreakersFromServiceDefault) { resource2circuitBreakerMap.remove(resource); } circuitBreakersFromServiceDefault.clear(); - } + // } } } catch (Throwable t) { LOGGER.error("update circuit breaker error, {}", message, t); diff --git a/fizz-core/src/test/java/we/service_registry/RegistryCenterServiceTests.java b/fizz-core/src/test/java/we/service_registry/RegistryCenterServiceTests.java index 11c1c47..6d21dd1 100644 --- a/fizz-core/src/test/java/we/service_registry/RegistryCenterServiceTests.java +++ b/fizz-core/src/test/java/we/service_registry/RegistryCenterServiceTests.java @@ -2,6 +2,8 @@ package we.service_registry; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.CharsetUtil; +import com.netflix.appinfo.InstanceInfo; +import com.netflix.discovery.DiscoveryClient; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.context.support.GenericApplicationContext; @@ -20,6 +22,7 @@ import we.util.YmlUtils; import javax.annotation.Resource; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Properties; @@ -79,4 +82,20 @@ public class RegistryCenterServiceTests { fizzServiceRegistration2.register(); Thread.currentThread().join(); } + + // @Test + void test() throws InterruptedException { + System.setProperty("server.port", "8866"); + Fizz.context = new GenericApplicationContext(); + Fizz.context.refresh(); + + String eu = FileUtil.readString("eureka.yml", CharsetUtil.CHARSET_UTF_8); + FizzEurekaServiceRegistration fizzServiceRegistration = (FizzEurekaServiceRegistration) FizzServiceRegistration.getFizzServiceRegistration(Fizz.context, FizzServiceRegistration.Type.EUREKA, FizzServiceRegistration.ConfigFormat.YML, eu); + fizzServiceRegistration.register(); + while (true) { + Thread.sleep(5_000); + FizzServiceRegistration.ServerStatus serverStatus = fizzServiceRegistration.getServerStatus(); + System.err.println("server status: " + serverStatus); + } + } } diff --git a/pom.xml b/pom.xml index 6a69e1a..e885407 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ Dysprosium-SR25 5.3.7.RELEASE 2.2.6.RELEASE - 4.1.73.Final + 4.1.74.Final 4.4.15 2.17.1 1.7.35