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