diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisAutoServiceRegistration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisAutoServiceRegistration.java index 719eb4e05..a04a10bcb 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisAutoServiceRegistration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisAutoServiceRegistration.java @@ -17,11 +17,10 @@ package com.tencent.cloud.polaris.registry; +import com.tencent.cloud.polaris.registry.graceful.AbstractGracefulServiceRegistration; +import com.tencent.cloud.polaris.registry.graceful.GracefulServiceRegistrationProperties; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -import org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration; -import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties; import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.cloud.client.serviceregistry.ServiceRegistry; import org.springframework.util.StringUtils; @@ -31,14 +30,14 @@ import org.springframework.util.StringUtils; * * @author Haotian Zhang, Andrew Shan, Jie Cheng */ -public class PolarisAutoServiceRegistration extends AbstractAutoServiceRegistration { +public class PolarisAutoServiceRegistration extends AbstractGracefulServiceRegistration { private static final Logger LOG = LoggerFactory.getLogger(PolarisAutoServiceRegistration.class); private final PolarisRegistration registration; public PolarisAutoServiceRegistration(ServiceRegistry serviceRegistry, - AutoServiceRegistrationProperties autoServiceRegistrationProperties, + GracefulServiceRegistrationProperties autoServiceRegistrationProperties, PolarisRegistration registration) { super(serviceRegistry, autoServiceRegistrationProperties); this.registration = registration; diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java index 5ac48bf71..a02f0b190 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistry.java @@ -18,9 +18,6 @@ package com.tencent.cloud.polaris.registry; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; - import com.tencent.cloud.common.metadata.StaticMetadataManager; import com.tencent.cloud.polaris.PolarisDiscoveryProperties; import com.tencent.cloud.polaris.discovery.PolarisDiscoveryHandler; @@ -36,11 +33,13 @@ import com.tencent.polaris.client.util.NamedThreadFactory; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.springframework.beans.BeanUtils; import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.cloud.client.serviceregistry.ServiceRegistry; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; + import static java.util.concurrent.TimeUnit.MILLISECONDS; import static org.springframework.util.ReflectionUtils.rethrowRuntimeException; @@ -84,6 +83,7 @@ public class PolarisServiceRegistry implements ServiceRegistry { return; } // Register instance. + System.out.println("事件注册"); InstanceRegisterRequest instanceRegisterRequest = new InstanceRegisterRequest(); instanceRegisterRequest.setNamespace(polarisDiscoveryProperties.getNamespace()); instanceRegisterRequest.setService(registration.getServiceId()); diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java index 6533edf93..ceb14e19e 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/PolarisServiceRegistryAutoConfiguration.java @@ -23,16 +23,15 @@ import com.tencent.cloud.polaris.PolarisDiscoveryProperties; import com.tencent.cloud.polaris.discovery.PolarisDiscoveryAutoConfiguration; import com.tencent.cloud.polaris.discovery.PolarisDiscoveryHandler; import com.tencent.cloud.polaris.extend.consul.ConsulContextProperties; +import com.tencent.cloud.polaris.registry.graceful.GracefulServiceRegistrationAutoConfiguration; +import com.tencent.cloud.polaris.registry.graceful.GracefulServiceRegistrationConfiguration; +import com.tencent.cloud.polaris.registry.graceful.GracefulServiceRegistrationProperties; import com.tencent.polaris.client.api.SDKContext; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration; -import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration; -import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -44,9 +43,9 @@ import org.springframework.context.annotation.Configuration; @Configuration(proxyBeanMethods = false) @EnableConfigurationProperties @ConditionalOnPolarisRegisterEnabled -@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true) -@AutoConfigureAfter({AutoServiceRegistrationConfiguration.class, - AutoServiceRegistrationAutoConfiguration.class, +@ConditionalOnProperty(value = "spring.cloud.service-registry.graceful-registration.enabled", matchIfMissing = false) +@AutoConfigureAfter({GracefulServiceRegistrationConfiguration.class, + GracefulServiceRegistrationAutoConfiguration.class, PolarisDiscoveryAutoConfiguration.class}) public class PolarisServiceRegistryAutoConfiguration { @@ -58,7 +57,7 @@ public class PolarisServiceRegistryAutoConfiguration { } @Bean - @ConditionalOnBean(AutoServiceRegistrationProperties.class) + @ConditionalOnBean(GracefulServiceRegistrationProperties.class) public PolarisRegistration polarisRegistration( PolarisDiscoveryProperties polarisDiscoveryProperties, @Autowired(required = false) ConsulContextProperties consulContextProperties, @@ -67,10 +66,10 @@ public class PolarisServiceRegistryAutoConfiguration { } @Bean - @ConditionalOnBean(AutoServiceRegistrationProperties.class) + @ConditionalOnBean(GracefulServiceRegistrationProperties.class) public PolarisAutoServiceRegistration polarisAutoServiceRegistration( PolarisServiceRegistry registry, - AutoServiceRegistrationProperties autoServiceRegistrationProperties, + GracefulServiceRegistrationProperties autoServiceRegistrationProperties, PolarisRegistration registration) { return new PolarisAutoServiceRegistration(registry, autoServiceRegistrationProperties, registration); } diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/AbstractGracefulServiceRegistration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/AbstractGracefulServiceRegistration.java new file mode 100644 index 000000000..22541b02c --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/AbstractGracefulServiceRegistration.java @@ -0,0 +1,264 @@ +package com.tencent.cloud.polaris.registry.graceful; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.BeansException; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.boot.web.context.ConfigurableWebServerApplicationContext; +import org.springframework.cloud.client.discovery.ManagementServerPortUtils; +import org.springframework.cloud.client.discovery.event.InstancePreRegisteredEvent; +import org.springframework.cloud.client.discovery.event.InstanceRegisteredEvent; +import org.springframework.cloud.client.serviceregistry.Registration; +import org.springframework.cloud.client.serviceregistry.ServiceRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.ApplicationListener; +import org.springframework.core.env.Environment; + +import javax.annotation.PreDestroy; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + + +/** + * Lifecycle methods that may be useful and common to {@link ServiceRegistry} + * implementations. + * + * TODO: Document the lifecycle. + * + * @param Registration type passed to the {@link ServiceRegistry}. + * @author Spencer Gibb + */ +public abstract class AbstractGracefulServiceRegistration + implements GracefulServiceRegistration, ApplicationContextAware, + ApplicationListener { + + private static final Log logger = LogFactory + .getLog(AbstractGracefulServiceRegistration.class); + + private final ServiceRegistry serviceRegistry; + + private boolean autoStartup = true; + + private AtomicBoolean running = new AtomicBoolean(false); + + private int order = 0; + + private ApplicationContext context; + + private Environment environment; + + private AtomicInteger port = new AtomicInteger(0); + + private GracefulServiceRegistrationProperties properties; + + @Deprecated + protected AbstractGracefulServiceRegistration(ServiceRegistry serviceRegistry) { + this.serviceRegistry = serviceRegistry; + } + + protected AbstractGracefulServiceRegistration(ServiceRegistry serviceRegistry, + GracefulServiceRegistrationProperties properties) { + this.serviceRegistry = serviceRegistry; + this.properties = properties; + } + + protected ApplicationContext getContext() { + return this.context; + } + + @Override + @SuppressWarnings("deprecation") + public void onApplicationEvent(ApplicationReadyEvent event) { + bind(event); + } + + @Deprecated + public void bind(ApplicationReadyEvent event) { + ApplicationContext context = event.getApplicationContext(); + if (context instanceof ConfigurableWebServerApplicationContext) { + if ("management".equals(((ConfigurableWebServerApplicationContext) context) + .getServerNamespace())) { + return; + } + } + this.port.compareAndSet(0, Integer.parseInt(environment.getProperty("server.port"))); + this.start(); + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) + throws BeansException { + this.context = applicationContext; + this.environment = this.context.getEnvironment(); + } + + @Deprecated + protected Environment getEnvironment() { + return this.environment; + } + + @Deprecated + protected AtomicInteger getPort() { + return this.port; + } + + public boolean isAutoStartup() { + return this.autoStartup; + } + + public void start() { + if (!isEnabled()) { + if (logger.isDebugEnabled()) { + logger.debug("Discovery Lifecycle disabled. Not starting"); + } + return; + } + + // only initialize if nonSecurePort is greater than 0 and it isn't already running + // because of containerPortInitializer below + if (!this.running.get()) { + this.context.publishEvent( + new InstancePreRegisteredEvent(this, getRegistration())); + register(); + if (shouldRegisterManagement()) { + registerManagement(); + } + this.context.publishEvent( + new InstanceRegisteredEvent<>(this, getConfiguration())); + this.running.compareAndSet(false, true); + } + + } + + /** + * @return Whether the management service should be registered with the + * {@link ServiceRegistry}. + */ + protected boolean shouldRegisterManagement() { + if (this.properties == null || this.properties.isRegisterManagement()) { + return getManagementPort() != null + && ManagementServerPortUtils.isDifferent(this.context); + } + return false; + } + + /** + * @return The object used to configure the registration. + */ + @Deprecated + protected abstract Object getConfiguration(); + + /** + * @return True, if this is enabled. + */ + protected abstract boolean isEnabled(); + + /** + * @return The serviceId of the Management Service. + */ + @Deprecated + protected String getManagementServiceId() { + // TODO: configurable management suffix + return this.context.getId() + ":management"; + } + + /** + * @return The service name of the Management Service. + */ + @Deprecated + protected String getManagementServiceName() { + // TODO: configurable management suffix + return getAppName() + ":management"; + } + + /** + * @return The management server port. + */ + @Deprecated + protected Integer getManagementPort() { + return ManagementServerPortUtils.getPort(this.context); + } + + /** + * @return The app name (currently the spring.application.name property). + */ + @Deprecated + protected String getAppName() { + return this.environment.getProperty("spring.application.name", "application"); + } + + @PreDestroy + public void destroy() { + stop(); + } + + public boolean isRunning() { + return this.running.get(); + } + + protected AtomicBoolean getRunning() { + return this.running; + } + + public int getOrder() { + return this.order; + } + + public int getPhase() { + return 0; + } + + protected ServiceRegistry getServiceRegistry() { + return this.serviceRegistry; + } + + protected abstract R getRegistration(); + + protected abstract R getManagementRegistration(); + + /** + * Register the local service with the {@link ServiceRegistry}. + */ + protected void register() { + this.serviceRegistry.register(getRegistration()); + } + + /** + * Register the local management service with the {@link ServiceRegistry}. + */ + protected void registerManagement() { + R registration = getManagementRegistration(); + if (registration != null) { + this.serviceRegistry.register(registration); + } + } + + /** + * De-register the local service with the {@link ServiceRegistry}. + */ + protected void deregister() { + this.serviceRegistry.deregister(getRegistration()); + } + + /** + * De-register the local management service with the {@link ServiceRegistry}. + */ + protected void deregisterManagement() { + R registration = getManagementRegistration(); + if (registration != null) { + this.serviceRegistry.deregister(registration); + } + } + + public void stop() { + if (this.getRunning().compareAndSet(true, false) && isEnabled()) { + deregister(); + if (shouldRegisterManagement()) { + deregisterManagement(); + } + this.serviceRegistry.close(); + } + } + +} \ No newline at end of file diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/GracefulServiceRegistration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/GracefulServiceRegistration.java new file mode 100644 index 000000000..b54d91075 --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/GracefulServiceRegistration.java @@ -0,0 +1,5 @@ +package com.tencent.cloud.polaris.registry.graceful; + +public interface GracefulServiceRegistration { + +} diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/GracefulServiceRegistrationAutoConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/GracefulServiceRegistrationAutoConfiguration.java new file mode 100644 index 000000000..7a1dfcc75 --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/GracefulServiceRegistrationAutoConfiguration.java @@ -0,0 +1,32 @@ +package com.tencent.cloud.polaris.registry.graceful; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +import javax.annotation.PostConstruct; + +/** + * @author Spencer Gibb + */ +@Configuration(proxyBeanMethods = false) +@Import(GracefulServiceRegistrationConfiguration.class) +@ConditionalOnProperty(value = "spring.cloud.service-registry.graceful-registration.enabled") +public class GracefulServiceRegistrationAutoConfiguration { + + @Autowired(required = false) + private GracefulServiceRegistration gracefulServiceRegistration; + + @Autowired + private GracefulServiceRegistrationProperties properties; + + @PostConstruct + protected void init() { + if (this.gracefulServiceRegistration == null && this.properties.isFailFast()) { + throw new IllegalStateException("Graceful Service Registration has " + + "been requested, but there is no GracefulServiceRegistration bean"); + } + } + +} \ No newline at end of file diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/GracefulServiceRegistrationConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/GracefulServiceRegistrationConfiguration.java new file mode 100644 index 000000000..8f502754f --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/GracefulServiceRegistrationConfiguration.java @@ -0,0 +1,12 @@ +package com.tencent.cloud.polaris.registry.graceful; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +@EnableConfigurationProperties(GracefulServiceRegistrationProperties.class) +@ConditionalOnProperty(value = "spring.cloud.service-registry.graceful-registration.enabled") +public class GracefulServiceRegistrationConfiguration { + +} diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/GracefulServiceRegistrationProperties.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/GracefulServiceRegistrationProperties.java new file mode 100644 index 000000000..07258130a --- /dev/null +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/registry/graceful/GracefulServiceRegistrationProperties.java @@ -0,0 +1,48 @@ +package com.tencent.cloud.polaris.registry.graceful; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties("spring.cloud.service-registry.graceful-registration") +public class GracefulServiceRegistrationProperties { + + /** Whether service graceful-registration is enabled. Defaults to true. */ + private boolean enabled = true; + + /** Whether to register the management as a service. Defaults to true. */ + private boolean registerManagement = true; + + /** + * Whether startup fails if there is no AutoServiceRegistration. Defaults to false. + */ + private boolean failFast = false; + + public boolean isEnabled() { + return this.enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public boolean isRegisterManagement() { + return this.registerManagement; + } + + public void setRegisterManagement(boolean registerManagement) { + this.registerManagement = registerManagement; + } + + @Deprecated + public boolean shouldRegisterManagement() { + return this.registerManagement; + } + + public boolean isFailFast() { + return this.failFast; + } + + public void setFailFast(boolean failFast) { + this.failFast = failFast; + } + +} \ No newline at end of file diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/spring.factories b/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/spring.factories index e8deb25e8..1e868c2e3 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/spring.factories +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/resources/META-INF/spring.factories @@ -3,6 +3,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.tencent.cloud.polaris.discovery.PolarisDiscoveryAutoConfiguration,\ com.tencent.cloud.polaris.ribbon.PolarisDiscoveryRibbonAutoConfiguration,\ com.tencent.cloud.polaris.registry.PolarisServiceRegistryAutoConfiguration,\ - com.tencent.cloud.polaris.endpoint.PolarisDiscoveryEndpointAutoConfiguration + com.tencent.cloud.polaris.endpoint.PolarisDiscoveryEndpointAutoConfiguration,\ + com.tencent.cloud.polaris.registry.graceful.GracefulServiceRegistrationAutoConfiguration org.springframework.cloud.bootstrap.BootstrapConfiguration=\ com.tencent.cloud.polaris.DiscoveryPropertiesBootstrapAutoConfiguration diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/registry/PolarisAutoServiceRegistrationTest.java b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/registry/PolarisGracefulServiceRegistrationTest.java similarity index 94% rename from spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/registry/PolarisAutoServiceRegistrationTest.java rename to spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/registry/PolarisGracefulServiceRegistrationTest.java index 1414b3d27..61a9c5dd9 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/registry/PolarisAutoServiceRegistrationTest.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/test/java/com/tencent/cloud/polaris/registry/PolarisGracefulServiceRegistrationTest.java @@ -18,13 +18,12 @@ package com.tencent.cloud.polaris.registry; import com.tencent.cloud.polaris.PolarisDiscoveryProperties; +import com.tencent.cloud.polaris.registry.graceful.GracefulServiceRegistrationProperties; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; - -import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties; import org.springframework.cloud.client.serviceregistry.Registration; import org.springframework.cloud.client.serviceregistry.ServiceRegistry; import org.springframework.context.ApplicationContext; @@ -45,13 +44,13 @@ import static org.mockito.Mockito.doReturn; * @author Haotian Zhang */ @RunWith(MockitoJUnitRunner.class) -public class PolarisAutoServiceRegistrationTest { +public class PolarisGracefulServiceRegistrationTest { @Mock private ServiceRegistry serviceRegistry; @Mock - private AutoServiceRegistrationProperties autoServiceRegistrationProperties; + private GracefulServiceRegistrationProperties autoServiceRegistrationProperties; @Mock private PolarisDiscoveryProperties polarisDiscoveryProperties; diff --git a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-callee-service/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-callee-service/src/main/resources/bootstrap.yml index 75b4e33d9..6fdc919b2 100644 --- a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-callee-service/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-callee-service/src/main/resources/bootstrap.yml @@ -5,12 +5,15 @@ spring: name: DiscoveryCalleeService cloud: polaris: - address: grpc://183.47.111.80:8091 + address: grpc://127.0.0.1:8091 namespace: default enabled: true discovery: enabled: true register: true + service-registry: + graceful-registration: + enabled: true tencent: metadata: content: diff --git a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/java/com/tencent/cloud/polaris/discovery/service/caller/DiscoveryCallerService.java b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/java/com/tencent/cloud/polaris/discovery/service/caller/DiscoveryCallerService.java index 0eae4b427..dd7498e28 100644 --- a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/java/com/tencent/cloud/polaris/discovery/service/caller/DiscoveryCallerService.java +++ b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/java/com/tencent/cloud/polaris/discovery/service/caller/DiscoveryCallerService.java @@ -34,7 +34,9 @@ import org.springframework.web.client.RestTemplate; public class DiscoveryCallerService { public static void main(String[] args) { - SpringApplication.run(DiscoveryCallerService.class, args); + SpringApplication app = new SpringApplication(DiscoveryCallerService.class); + app.addListeners(new MyListenery()); + app.run(args); } @Bean diff --git a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/java/com/tencent/cloud/polaris/discovery/service/caller/MyListenery.java b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/java/com/tencent/cloud/polaris/discovery/service/caller/MyListenery.java new file mode 100644 index 000000000..1859266bd --- /dev/null +++ b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/java/com/tencent/cloud/polaris/discovery/service/caller/MyListenery.java @@ -0,0 +1,59 @@ +package com.tencent.cloud.polaris.discovery.service.caller; + +import org.springframework.boot.web.context.WebServerInitializedEvent; +import org.springframework.boot.web.reactive.context.ReactiveWebServerInitializedEvent; +import org.springframework.boot.web.servlet.context.ServletWebServerInitializedEvent; +import org.springframework.context.ApplicationEvent; +import org.springframework.context.ApplicationListener; + +public class MyListenery implements ApplicationListener { + + @Override + public void onApplicationEvent(ApplicationEvent event) { +// ApplicationStartingEvent//启动开始的时候执行的事件 +// ApplicationEnvironmentPreparedEvent//上下文创建之前运行的事件 +// ApplicationContextInitializedEvent// +// ApplicationPreparedEvent//上下文创建完成,注入的bean还没加载完成 +// ContextRefreshedEvent//上下文刷新 +// ServletWebServerInitializedEvent//web服务器初始化 +// ApplicationStartedEvent// +// ApplicationReadyEvent//启动成功 +// ApplicationFailedEvent//在启动Spring发生异常时触发 + switch (event.getClass().getSimpleName()){ + case "ApplicationStartingEvent": + System.out.println("事件ApplicationStartingEvent"); + break; + case "ApplicationEnvironmentPreparedEvent": + System.out.println("事件ApplicationEnvironmentPreparedEvent"); + break; + case "ApplicationContextInitializedEvent": + System.out.println("事件ApplicationContextInitializedEvent"); + break; + case "ApplicationPreparedEvent": + System.out.println("事件ApplicationPreparedEvent"); + break; + case "ContextRefreshedEvent": + System.out.println("事件ContextRefreshedEvent"); + break; + case "ApplicationStartedEvent": + System.out.println("事件ApplicationStartedEvent"); + break; + case "ServletWebServerInitializedEvent": + if( event instanceof WebServerInitializedEvent){ + System.out.println("事件WebServerInitializedEvent"); + } + if( event instanceof ServletWebServerInitializedEvent){ + System.out.println("事件ServletWebServerInitializedEvent"); + } + if( event instanceof ReactiveWebServerInitializedEvent){ + System.out.println("事件ReactiveWebServerInitializedEvent"); + } + break; + case "ApplicationReadyEvent": + System.out.println("事件ApplicationReadyEvent"); + break; + case "ApplicationFailedEvent": + break; + } + } +} \ No newline at end of file diff --git a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/resources/bootstrap.yml b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/resources/bootstrap.yml index 544193b7e..27ed26d7d 100644 --- a/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/resources/bootstrap.yml +++ b/spring-cloud-tencent-examples/polaris-discovery-example/discovery-caller-service/src/main/resources/bootstrap.yml @@ -5,6 +5,11 @@ spring: application: name: DiscoveryCallerService cloud: + service-registry: + graceful-registration: + enabled: true + auto-registration: + enabled: false polaris: address: grpc://183.47.111.80:8091 namespace: default