nacos服务注册之SpringCloud 集成nacos

小知识,大挑战!本文正在参与“ 程序员必备小知识 ”创作活动

本文同时参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金

3 nacos服务注册之SpringCloud 集成nacos

服务注册的功能主要体现在:

  • 服务实例在启动时注册到服务注册表,并在关闭时注销。
  • 服务消费者查询服务注册表,获得可用实例。
  • 服务注册中心需要调用服务实例的健康检查API来验证 是否能够处理请求

ServiceRegistry是Spring Cloud提供的服务注册的标准。集成到Spring Cloud中实现服务注册的组件,都会实现该接口。

public interface ServiceRegistry<R extends Registration> {

   /**
    * Registers the registration. A registration typically has information about an
    * instance, such as its hostname and port.
    * @param registration registration meta data
    */
   void register(R registration);

   /**
    * Deregisters the registration.
    * @param registration registration meta data
    */
   void deregister(R registration);

   /**
    * Closes the ServiceRegistry. This is a lifecycle method.
    */
   void close();

   /**
    * Sets the status of the registration. The status values are determined by the
    * individual implementations.
    * @param registration The registration to update.
    * @param status The status to set.
    * @see org.springframework.cloud.client.serviceregistry.endpoint.ServiceRegistryEndpoint
    */
   void setStatus(R registration, String status);

   /**
    * Gets the status of a particular registration.
    * @param registration The registration to query.
    * @param <T> The type of the status.
    * @return The status of the registration.
    * @see org.springframework.cloud.client.serviceregistry.endpoint.ServiceRegistryEndpoint
    */
   <T> T getStatus(R registration);

}
复制代码

NacosServiceRegistry实现该接口

SpringCloud 集成nacos

spring-cloud-commons包的META-INF/spring.factories自动装配:

# AutoConfiguration
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.client.CommonsClientAutoConfiguration,\
org.springframework.cloud.client.discovery.composite.CompositeDiscoveryClientAutoConfiguration,\
org.springframework.cloud.client.discovery.noop.NoopDiscoveryClientAutoConfiguration,\
org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration,\
org.springframework.cloud.client.hypermedia.CloudHypermediaAutoConfiguration,\
org.springframework.cloud.client.loadbalancer.AsyncLoadBalancerAutoConfiguration,\
org.springframework.cloud.client.loadbalancer.LoadBalancerAutoConfiguration,\
org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancerAutoConfiguration,\
org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration,\
org.springframework.cloud.commons.httpclient.HttpClientConfiguration,\
org.springframework.cloud.commons.util.UtilAutoConfiguration,\
org.springframework.cloud.configuration.CompatibilityVerifierAutoConfiguration,\
org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration
# Environment Post Processors
org.springframework.boot.env.EnvironmentPostProcessor=\
org.springframework.cloud.client.HostInfoEnvironmentPostProcessor
# Failure Analyzers
org.springframework.boot.diagnostics.FailureAnalyzer=\
org.springframework.cloud.configuration.CompatibilityNotMetFailureAnalyzer
复制代码

AutoServiceRegistrationAutoConfiguration是服务注册相关的配置类

@Configuration(proxyBeanMethods = false)
@Import(AutoServiceRegistrationConfiguration.class)
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled",
      matchIfMissing = true)
public class AutoServiceRegistrationAutoConfiguration {

   @Autowired(required = false)
   private AutoServiceRegistration autoServiceRegistration;

   @Autowired
   private AutoServiceRegistrationProperties properties;

   @PostConstruct
   protected void init() {
      if (this.autoServiceRegistration == null && this.properties.isFailFast()) {
         throw new IllegalStateException("Auto Service Registration has "
               + "been requested, but there is no AutoServiceRegistration bean");
      }
   }

}
复制代码

AutoServiceRegistrationAutoConfiguration注入了AutoServiceRegistration,AutoServiceRegistration是个接口,AbstractAutoServiceRegistration实现了这个接口,而NacosAutoServiceRegistration继承了AbstractAutoServiceRegistration

AbstractAutoServiceRegistration同时实现了ApplicationListener接口:

ApplicationListener接口:

@FunctionalInterface
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {

   /**
    * Handle an application event.
    * @param event the event to respond to
    */
   void onApplicationEvent(E event);

}
复制代码

接口中方法的作用是监听某个特定事件,

AbstractAutoServiceRegistration实现了这个接口:

@Override
@SuppressWarnings("deprecation")
public void onApplicationEvent(WebServerInitializedEvent event) {
   bind(event);
}

@Deprecated
public void bind(WebServerInitializedEvent event) {
   ApplicationContext context = event.getApplicationContext();
   if (context instanceof ConfigurableWebServerApplicationContext) {
      if ("management".equals(((ConfigurableWebServerApplicationContext) context)
            .getServerNamespace())) {
         return;
      }
   }
   this.port.compareAndSet(0, event.getWebServer().getPort());
   this.start();
}
复制代码

AbstractAutoServiceRegistration监听WebServerInitializedEvent事件,调用bind方法 ,最终调用NacosServiceRegistry的register方法

总结一下: 服务注册的功能主要体现在:

  • 服务实例在启动时注册到服务注册表,并在关闭时注销。
  • 服务消费者查询服务注册表,获得可用实例。
  • 服务注册中心需要调用服务实例的健康检查API来验证 是否能够处理请求

这就是SpringCloud集成nacos的部分,ServiceRegistry是Spring Cloud提供的服务注册的标准。如果你有什么不懂的地方,或者我写错的地方,欢迎给我留言评论,我们一起学习一起进步,一起成就更好的自己,提升技术,服务业务,服务工作。我们一起努力,共同进步,我们下篇文章见。

猜你喜欢

转载自juejin.im/post/7017367628729548814