Merge pull request #402 from wehotel/develop

This commit is contained in:
hongqiaowei
2022-02-09 16:48:14 +08:00
committed by GitHub
8 changed files with 53 additions and 13 deletions

View File

@@ -20,10 +20,10 @@
<spring-session-bom.version>Dragonfruit-SR3</spring-session-bom.version> <spring-session-bom.version>Dragonfruit-SR3</spring-session-bom.version>
<reactor-bom.version>Dysprosium-SR25</reactor-bom.version> <reactor-bom.version>Dysprosium-SR25</reactor-bom.version>
<lettuce.version>5.3.7.RELEASE</lettuce.version> <lettuce.version>5.3.7.RELEASE</lettuce.version>
<netty.version>4.1.73.Final</netty.version> <netty.version>4.1.74.Final</netty.version>
<httpcore.version>4.4.15</httpcore.version> <httpcore.version>4.4.15</httpcore.version>
<log4j2.version>2.17.1</log4j2.version> <log4j2.version>2.17.1</log4j2.version>
<slf4j.version>1.7.33</slf4j.version> <slf4j.version>1.7.35</slf4j.version>
<commons-lang3.version>3.12.0</commons-lang3.version> <commons-lang3.version>3.12.0</commons-lang3.version>
<lombok.version>1.18.22</lombok.version> <lombok.version>1.18.22</lombok.version>
<apache.dubbo.version>2.7.5</apache.dubbo.version> <apache.dubbo.version>2.7.5</apache.dubbo.version>

View File

@@ -163,8 +163,10 @@ public class FlowControlFilter extends FizzWebFilter {
} }
ServerHttpResponse resp = exchange.getResponse(); ServerHttpResponse resp = exchange.getResponse();
resp.setStatusCode(HttpStatus.OK); resp.setStatusCode(HttpStatus.FORBIDDEN);
resp.getHeaders().add(HttpHeaders.CONTENT_TYPE, responseContentType); HttpHeaders headers = resp.getHeaders();
headers.set(HttpHeaders.CONTENT_TYPE, responseContentType);
headers.set("traceId", traceId);
return resp.writeWith(Mono.just(resp.bufferFactory().wrap(responseContent.getBytes()))); return resp.writeWith(Mono.just(resp.bufferFactory().wrap(responseContent.getBytes())));
} else { } else {

View File

@@ -36,7 +36,7 @@ import java.util.Properties;
public abstract class FizzServiceRegistration { 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 { public enum Type {
EUREKA, NACOS; EUREKA, NACOS;

View File

@@ -22,7 +22,6 @@ import com.netflix.discovery.DiscoveryClient;
import com.netflix.discovery.EurekaClientConfig; import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.shared.Application; import com.netflix.discovery.shared.Application;
import com.netflix.discovery.shared.Applications; 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.CloudEurekaClient;
import org.springframework.cloud.netflix.eureka.EurekaClientConfigBean; import org.springframework.cloud.netflix.eureka.EurekaClientConfigBean;
import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration; import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration;
@@ -42,9 +41,14 @@ public class FizzEurekaServiceRegistration extends FizzServiceRegistration {
private final CloudEurekaClient client; private final CloudEurekaClient client;
private final long renewalInterval;
private long prevHeartbeatTimestamp = -1;
public FizzEurekaServiceRegistration(String id, EurekaRegistration registration, EurekaServiceRegistry serviceRegistry, CloudEurekaClient client) { public FizzEurekaServiceRegistration(String id, EurekaRegistration registration, EurekaServiceRegistry serviceRegistry, CloudEurekaClient client) {
super(id, Type.EUREKA, registration, serviceRegistry); super(id, Type.EUREKA, registration, serviceRegistry);
this.client = client; this.client = client;
renewalInterval = this.client.getApplicationInfoManager().getInfo().getLeaseInfo().getRenewalIntervalInSecs() * 1000L;
} }
public DiscoveryClient getDiscoveryClient() { public DiscoveryClient getDiscoveryClient() {
@@ -102,8 +106,23 @@ public class FizzEurekaServiceRegistration extends FizzServiceRegistration {
} }
} }
String join = StringUtils.join(eurekaServerServiceUrls, ','); long heartbeatTimestamp = client.getStats().lastSuccessfulHeartbeatTimestampMs();
throw Utils.runtimeExceptionWithoutStack("can't find any server with " + join); 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) { private ServerStatus transfrom(InstanceInfo.InstanceStatus status) {

View File

@@ -81,7 +81,7 @@ public class FizzNacosServiceRegistration extends FizzServiceRegistration {
return ServerStatus.DOWN; return ServerStatus.DOWN;
} else { } else {
log.warn("{} status is {}", getId(), status); LOGGER.warn("nacos {} status is {}", getId(), status);
return ServerStatus.UNKNOWN; return ServerStatus.UNKNOWN;
} }
} }

View File

@@ -151,12 +151,12 @@ public class CircuitBreakManager {
// updateParentResourceMap(cb); // updateParentResourceMap(cb);
// LOGGER.info("update parentResourceMap: {}", parentResourceMap); // LOGGER.info("update parentResourceMap: {}", parentResourceMap);
if (cb.type == CircuitBreaker.Type.SERVICE_DEFAULT) { if (cb.type == CircuitBreaker.Type.SERVICE_DEFAULT) {
if (cb.isDeleted || !cb.serviceDefaultEnable) { // if (cb.isDeleted || !cb.serviceDefaultEnable) {
for (String resource : circuitBreakersFromServiceDefault) { for (String resource : circuitBreakersFromServiceDefault) {
resource2circuitBreakerMap.remove(resource); resource2circuitBreakerMap.remove(resource);
} }
circuitBreakersFromServiceDefault.clear(); circuitBreakersFromServiceDefault.clear();
} // }
} }
} catch (Throwable t) { } catch (Throwable t) {
LOGGER.error("update circuit breaker error, {}", message, t); LOGGER.error("update circuit breaker error, {}", message, t);

View File

@@ -2,6 +2,8 @@ package we.service_registry;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.CharsetUtil; 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.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.context.support.GenericApplicationContext; import org.springframework.context.support.GenericApplicationContext;
@@ -20,6 +22,7 @@ import we.util.YmlUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
@@ -79,4 +82,20 @@ public class RegistryCenterServiceTests {
fizzServiceRegistration2.register(); fizzServiceRegistration2.register();
Thread.currentThread().join(); 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);
}
}
} }

View File

@@ -10,10 +10,10 @@
<reactor-bom.version>Dysprosium-SR25</reactor-bom.version> <reactor-bom.version>Dysprosium-SR25</reactor-bom.version>
<lettuce.version>5.3.7.RELEASE</lettuce.version> <lettuce.version>5.3.7.RELEASE</lettuce.version>
<nacos.cloud.version>2.2.6.RELEASE</nacos.cloud.version> <nacos.cloud.version>2.2.6.RELEASE</nacos.cloud.version>
<netty.version>4.1.73.Final</netty.version> <netty.version>4.1.74.Final</netty.version>
<httpcore.version>4.4.15</httpcore.version> <httpcore.version>4.4.15</httpcore.version>
<log4j2.version>2.17.1</log4j2.version> <log4j2.version>2.17.1</log4j2.version>
<slf4j.version>1.7.33</slf4j.version> <slf4j.version>1.7.35</slf4j.version>
<apache.dubbo.version>2.7.5</apache.dubbo.version> <apache.dubbo.version>2.7.5</apache.dubbo.version>
<grpc.version>1.16.1</grpc.version> <grpc.version>1.16.1</grpc.version>
<mockito.version>3.4.6</mockito.version> <mockito.version>3.4.6</mockito.version>