第 13 章 服务注册与发现(2)
丁雪丰
13.3 服务注册与发现的抽象与应用
Spring Cloud 的服务注册与发现机制正是图 13-3 分布式负载均衡方案的一种实现,它提供了定义好的各种接口,针对不同的服务注册中心,我们只需提供不同的注册与发现实现类就能获得想要的负载均衡能力。在 13.3 节中,我们会看到除了 Zookeeper,还可以用 Nacos、Consul 和 Eureka 来充当注册中心,在此之前先让我们来了解下这套机制是如何实现的。
13.3.1 服务注册的抽象
服务是静态的概念,真正提供服务的是一个个运行中的服务实例,ServiceInstance 接口就代表了这个概念,其中包含了服务 ID、实例 ID、主机、端口等信息。Registration 接口没有任何内容,它的作用是充当注册动作的标识。在 13.2 节中,我们的注册中心用的是 Zookeeper,所以 Spring Cloud Zookeepr 提供了一个 ZookeeperRegistration 子接口,实现类是 ServiceInstanceRegistration。
ServiceRegistry 接口的作用就是向注册中心注册和注销 Registration,其中的方法是 register()、deregister()、setStatus()、getStatus() 和 close(),分别对应了注册、注销、设置节点状态、获取节点状态和关闭。ZookeeperServiceRegistry 就是该接口对应的实现,基于 Apache Curator 的 ServiceDiscovery 对 Zookeeper 做各种对应的操作,负责在启动时把实例注册到 Zookeeper 上。
知道了 ServiceRegistry 负责服务实例的注册后,又是什么地方触发了注册这个动作呢?我们的应用启动后就自动注册到了注册中心,并没有人为进行注册,AutoServiceRegistration 接口就代表了自动服务注册的行为,这个接口只是一个标识,里面没有具体的方法,重要的内容都在抽象类 AbstractAutoServiceRegistration 中。在接收到 WebServerInitializedEvent 事件后,会根据设置判断是否需要自动注册,如果需要则触发服务实例的注册动作(也就是调用 register() 方法),AbstractAutoServiceRegistration 在调用 serviceRegistry.register() 进行服务注册前后分别还会触发 InstancePreRegisteredEvent 和 InstanceRegisteredEvent 事件,方便在这些阶段扩展自己的动作。只要不去设置 spring.cloud.service-registry.auto-registration.enabled 为 false,AutoServiceRegistrationAutoConfiguration 会配置自动服务注册相关的内容。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入介绍了Spring Cloud中的服务注册与发现机制,以及在不同注册中心的实现方式。文章详细解释了服务注册的抽象,包括ServiceInstance接口、Registration接口和ServiceRegistry接口的作用,以及自动服务注册的行为和相关实现类。对服务发现的抽象进行了详细介绍,包括DiscoveryClient接口的读操作和@LoadBalanced注解的RestTemplate在服务发现中的作用,以及Spring Cloud提供的不同DiscoveryClient的实现方式。最后,文章介绍了在Consul和Nacos中注册服务的方式,并列举了一些常用的配置项。通过具体的接口和实现类,以及在不同注册中心的应用,本文深入浅出地介绍了Spring Cloud中服务注册与发现的核心概念和实现方式。文章内容涵盖了Spring Cloud中服务注册与发现的关键知识点,对于想要深入了解微服务架构的开发人员和系统架构师来说,是一篇值得阅读的技术文章。同时,还提到了Eureka在AWS环境中的适用性,以及与Zookeeper和Consul的比较,为读者提供了选型参考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《学透 Spring:从入门到项目实战》
《学透 Spring:从入门到项目实战》
立即购买
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论