• Nacos注册中心3-Cleint端(注册和心跳)


    0. 环境

    • nacos版本:1.4.1
    • Spring Cloud : 2020.0.2
    • Spring Boot :2.4.4
    • Spring Cloud alibaba: 2.2.5.RELEASE

    测试代码:github.com/hsfxuebao/s…

    1. 入口分析

    spring.factories

    其中,会注入NacosAutoServiceRegistration:

    @Bean
    @ConditionalOnBean(AutoServiceRegistrationProperties.class)
    public NacosAutoServiceRegistration nacosAutoServiceRegistration(
          NacosServiceRegistry registry,
          AutoServiceRegistrationProperties autoServiceRegistrationProperties,
          NacosRegistration registration) {
       return new NacosAutoServiceRegistration(registry,
             autoServiceRegistrationProperties, registration);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    我们看一下 这个类的register()方法:

    // com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration#register
    @Override
    protected void register() {
       if (!this.registration.getNacosDiscoveryProperties().isRegisterEnabled()) {
          log.debug("Registration disabled.");
          return;
       }
       if (this.registration.getPort() < 0) {
          this.registration.setPort(getPort().get());
       }
       super.register();
    }
    
    // org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration#register
    protected void register() {
       this.serviceRegistry.register(getRegistration());
    }
    
    // com.alibaba.cloud.nacos.registry.NacosServiceRegistry#register
    @Override
    public void register(Registration registration) {
    
       if (StringUtils.isEmpty(registration.getServiceId())) {
          log.warn("No service to register for nacos client...");
          return;
       }
    
       NamingService namingService = namingService();
       String serviceId = registration.getServiceId();
       String group = nacosDiscoveryProperties.getGroup();
    
       Instance instance = getNacosInstanceFromRegistration(registration);
    
       try {
          namingService.registerInstance(serviceId, group, instance);
          log.info("nacos registry, {} {} {}:{} register finished", group, serviceId,
                instance.getIp(), instance.getPort());
       }
       catch (Exception e) {
          log.error("nacos registry, {} register failed...{},", serviceId,
                registration.toString(), e);
          // rethrow a RuntimeException if the registration is failed.
          // issue : https://github.com/alibaba/spring-cloud-alibaba/issues/1132
          rethrowRuntimeException(e);
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    核心方法namingService.registerInstance,接下来来到NacosNamingService#registerInstance方法中:

    @Override
    public void registerInstance(String serviceName, String groupName, Instance instance) throws NacosException {
        NamingUtils.checkInstanceIsLegal(instance);
        // 格式为:groupId@@微服务名称
        String groupedServiceName = NamingUtils.getGroupedName(serviceName, groupName);
        // 若当前实例为临时实例,则向Server发送心跳
        if (instance.isE
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    Pr:代理工作流程
    vim插件管理器之Vundle的使用
    BeautifulSoup的使用
    Zstack一面面经
    Linux新漏洞曝光,居然又双叒是提升权限漏洞
    Bootstrap Modal
    汇凯金业:黄金5g工艺是什么意思
    MATLAB源码-GRABIT从图像文件中提取数据点。
    c++之new和delete
    【JVM故障问题排查心得】「内存诊断系列」JVM内存与Kubernetes中pod的内存、容器的内存不一致所引发的OOMKilled问题总结(上)
  • 原文地址:https://blog.csdn.net/Huangjiazhen711/article/details/127801786