Add RegistryCenter.initFizzServiceRegistration

This commit is contained in:
hongqiaowei
2022-01-17 12:33:55 +08:00
parent b73cdaa0a2
commit bbd2cae3c5
3 changed files with 29 additions and 15 deletions

View File

@@ -20,7 +20,7 @@ package we.service_registry;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import we.Fizz;
import org.springframework.context.ApplicationContext;
import we.util.JacksonUtils;
/**
@@ -67,16 +67,17 @@ public class RegistryCenter {
this.clientConfig = clientConfig;
}
public void initFizzServiceRegistration(ApplicationContext applicationContext) {
fizzServiceRegistration = FizzServiceRegistration.getFizzServiceRegistration(
applicationContext,
type == EUREKA ? FizzServiceRegistration.Type.EUREKA : FizzServiceRegistration.Type.NACOS,
clientConfigFormat == YML ? FizzServiceRegistration.ConfigFormat.YML : FizzServiceRegistration.ConfigFormat.PROPERTIES,
clientConfig
);
}
@JsonIgnore
public FizzServiceRegistration getFizzServiceRegistration() {
if (fizzServiceRegistration == null) {
fizzServiceRegistration = FizzServiceRegistration.getFizzServiceRegistration(
Fizz.context,
type == EUREKA ? FizzServiceRegistration.Type.EUREKA : FizzServiceRegistration.Type.NACOS,
clientConfigFormat == YML ? FizzServiceRegistration.ConfigFormat.YML : FizzServiceRegistration.ConfigFormat.PROPERTIES,
clientConfig
);
}
return fizzServiceRegistration;
}

View File

@@ -19,6 +19,9 @@ package we.service_registry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.data.redis.core.ReactiveStringRedisTemplate;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
@@ -40,17 +43,20 @@ import java.util.Map;
*/
@Service
public class RegistryCenterService {
public class RegistryCenterService implements ApplicationListener<ContextRefreshedEvent> {
private static final Logger log = LoggerFactory.getLogger(RegistryCenterService.class);
private Map<String, RegistryCenter> registryCenterMap = new HashMap<>();
@Resource
private ReactiveWebServerApplicationContext applicationContext;
@Resource(name = AggregateRedisConfig.AGGREGATE_REACTIVE_REDIS_TEMPLATE)
private ReactiveStringRedisTemplate rt;
@PostConstruct
public void init() {
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
Result<?> result = initRegistryCenter();
if (result.code == Result.FAIL) {
throw new RuntimeException(result.msg, result.t);
@@ -76,6 +82,7 @@ public class RegistryCenterService {
RegistryCenter rc = JacksonUtils.readValue(json, RegistryCenter.class);
registryCenterMap.put(rc.name, rc);
log.info("init registry center {}", rc.name);
rc.initFizzServiceRegistration(applicationContext);
}
} catch (Throwable t) {
result.code = Result.FAIL;
@@ -123,12 +130,18 @@ public class RegistryCenterService {
String message = msg.getMessage();
try {
RegistryCenter rc = JacksonUtils.readValue(message, RegistryCenter.class);
RegistryCenter prev = null;
if (rc.isDeleted) {
registryCenterMap.remove(rc.name);
prev = registryCenterMap.remove(rc.name);
log.info("remove registry center {}", rc.name);
prev.getFizzServiceRegistration().deregister();
} else {
registryCenterMap.put(rc.name, rc);
prev = registryCenterMap.put(rc.name, rc);
log.info("update registry center {}", rc.name);
if (prev != null) {
prev.getFizzServiceRegistration().deregister();
}
rc.initFizzServiceRegistration(applicationContext);
}
} catch (Throwable t) {
log.error("update registry center error, {}", message, t);

View File

@@ -54,7 +54,7 @@ public class RegistryCenterServiceTests {
registryCenterServiceMap.put("1", "{\"id\":1,\"name\":\"default\",\"type\":1,\"format\":1,\"content\":\"" + yml + "\",\"isDeleted\":0}");
stringRedisTemplate.opsForHash().putAll("fizz_registry", registryCenterServiceMap);
registryCenterService.init();
registryCenterService.onApplicationEvent(null);
RegistryCenter def = registryCenterService.getRegistryCenter("default");
FizzServiceRegistration fizzServiceRegistration = def.getFizzServiceRegistration();
fizzServiceRegistration.register();