SpringBoot 如何实现服务自动发布,源码解析


前言

在启动springboot应用时,配置好注册中心信息,就可以完成服务的自动注册,那么服务注册的时机在spingboot中是在哪一步实现?通过此篇文章记录一下个人阅读源码后的理解。


一、springBoot 工程配置

spring:
  application:
    name: xx #服务别名----注册zookeeper到注册中心名称
  devtools:
    restart:
      enabled: false  #关闭自启动
  cloud:
    zookeeper:
      connect-string: 127.0.0.1:2181 #注册中心地址,多注册中心用逗号分隔
      discovery:
        register: true  #是否启动服务注册
        enabled: true #开启服务发现
        # instance-id: ${spring.application.name}_${server.port} #用于向zookeeper注册的ID,默认为随机 UUID。
        root: /yyyL #实例注册的根节点,默认为/services
  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>

二、Zk服务注册相关的配置类

ZookeeperAutoServiceRegistrationAutoConfiguration
这个类就是spring-cloud-starter-zookeeper-discovery自动装配导入的配置类,在jar包 spring.factories中查看。
在这里插入图片描述

ZookeeperAutoServiceRegistration

ZookeeperAutoServiceRegistration实例化的时候又有三个参数,分别是:ZookeeperServiceRegistry、ZookeeperRegistration、ZookeeperDiscoveryProperties

在这里插入图片描述

AbstractAutoServiceRegistration

ZookeeperAutoServiceRegistration是继承于AbstractAutoServiceRegistration
在这里插入图片描述
AbstractAutoServiceRegistration又是一个监听器,他监听了WebServerInitializedEvent事件,当事件触发时,会调用start()方法,start()方法中真正完成注册 动作是 register(), register()方法的真正实现其实是之前 通过构造方法传入进来的 ZookeeperServiceRegistry
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

监听事件

所以通过前面的代码发现,服务自动注册是依赖spring的监听机制实现的,那么WebServerInitializedEvent事件是在哪里产生的呢?

我们可以看到WebServerInitializedEvent有两个子类,其中springBoot中默认的实现其实是ServletWebServerInitializedEvent
在这里插入图片描述

事件的产生

Spring中 refresh()中的最后一步finishRefresh()
SpringBoot中ApplicationContext的默认实现是AnnotationConfigServletWebServerApplicationContext

在这里插入图片描述
在这里插入图片描述
可以看到是在 webServer被创建启动完成以后,产生事件ServletWebServerInitializedEvent 并被监听器触发。至此,就大概能知道 SpringBoot 应用启动到服务注册的流程了。

补充说明

下面再补充一下,ZookeeperAutoServiceRegistration实例化的时候,传入的三个参数。

ZookeeperRegistration – 服务的实例详情

服务的注册实例详情,包含 name、host 都是从配置文件中读取
在这里插入图片描述

ZookeeperServiceRegistry – 服务注册的真正实现类

这个类也是spring-cloud-starter-zookeeper-discovery自动装配导入的配置类,在此处被实例化并注入容器。
这个类主要用于 服务的注册,与zk的通讯。

在这里插入图片描述

ZookeeperServiceRegistry.register()方法就是注册服务
在这里插入图片描述

总结

以上就是今天要讲的内容,本文仅仅简单介绍了springBoot中zk作为注册中心的使用,主要原理就是通过SpringBoot的监听机制,完成服务的自动注册。初次写作,如有错误的地方欢迎大家指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值