• 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
  • 相关阅读:
    Java多线程2.2-synchronized 实现原理
    计算机组成原理(一)系统概论
    21天学习挑战赛--图像物体的边界
    智能交通和自动驾驶技术
    selenium frame切换
    WebSocket—STOMP详解(官方原版)
    JVM 优化技术
    01.一个页面为啥有四个进程
    下一代工具链「GitHub 热点速览 v.22.43」
    Transformer合集3
  • 原文地址:https://blog.csdn.net/Huangjiazhen711/article/details/127801786