spring clound alibaba之spring clound 如何集成的nacos 、完成向服务端注册流程源码解析

      说到spring clound 是如何集成 spring clound alibaba 的,就绕不开spring 的事件发布机制,没错,spring 是通过它的事件发布机制来集成 spring cloung alibaba nacos, 从而实现服务向 nacos 注册的。

JDK对事件监听机制的支持

       spring 的事件发布机制的根本原理是基于 观察者模式实现的,在jdk的基础jar包中,提供的观察者模式的最基本实现。它提供了两个基础类。

      EventObject:  定义事件类型, 里面可以传入事件源

EventListener:事件监听器,监听事件

需要你自己定义事件发布器,在里面注册监听器,发布事件信息。

spring 的事件发布机制

          spring的事件发布机制也是基于在上面所提到的两个基本类来实现的,当然,要比jdk的复杂得多。

 首先,定义了ApplicationEvent 对象,该对象继承 EventObject 接口

再定义了一个ApplicationListener ,继承EventListener 对象, 同时,定义了一个接受事件发布监听的接口,该接口要求传入监听的事件类型。

      定义了一个事件发布器, 用于发布定义的各种spring事件。但是其实真正发布spring事件的不是这个类,是另外一个类 ApplicationEventMulticaster。看了下有关spring的源码,spring一般都是要不直接调用ApplicationEventMulticaster.multicastEvent() 方法,要不就是通过 ApplicationEventPublisher.publishEvent(),再在里面调用ApplicationEventMulticaster.multicastEvent() 来实现对事件的发布。

spring cloud 如何实现向Nacos 进行客户端服务注册

     在Nacos 服务注册发现的包下面,有一个registry包,包下有如下方法,不难想象,实现服务自动注册就是由以下的类所完成的。

     

首先我们先看NacosAutoServiceRegistration类,类中的关系如下:

NacosAutoServiceRegistration 继承自 AbstractAutoServiceRegistration 类,而这个实现了 ApplicationListener 接口,所以接下来我们看下这个类所实现的监听方法。

onApplicationEvent() 方法调用了bind()方法, bind()再调用了 start(),  start() 再调用了register(), 实现注册的逻辑就在这个方法里面。

让我们看看register(), 

可以看到,  AbstractAutoServiceRegistration 类里依赖了 ServiceRegistry, 这是一个接口,NacosServiceRegistry 实现了此接口,所以,上面的 register()最后就会调用到 NacosServiceRegistry 的 register()

接下来,让我们看看NacosServiceRegistry 的 register()方法,可以看到,在这方法中,获取到 serviceId 和 所属group,构建了一个 Intance对象,这个对象就是代表此服务实例。

然后再调用  registerInstance()方法。

在这个方法中,首先判断了下是不是临时节点,如果是临时节点的话,就构建心跳信息,然后调用 addBeatInfo()向服务端发送心跳信息。

再就是调用 registerService(),构建参数列表,然后向服务器发送注册信息。

我们打开nacos 的官网,可以看到,官网上服务发现就是向nacos服务器发送以下这个请求,与我们看源码看到的一样。

那NacosAutoServiceRegistration 和 NacosRegistration 是好久注册的呢,这个我们就要看 NacosServiceRegistryAutoConfiguration类,在这个类中,实现了对这两个类的注册。


在AbstractAutoServiceRegistration中,监听的事件类型为 WebServerInitializedEvent 

       其实现类有2个, 一个是 ServletWebServerInitializedEven、ReactiveWebServerInitializedEventt,我们是web项目,所以只看 ServletWebServerInitializedEven就行了,单击它,可以看到调用它的地方只有一个,就是当servlet 容器完成刷新时,发布了ServletWebServerInitializedEven 事件,最终被 NacosAutoServiceRegistration 监听到,然后完成了向服务端发送心跳和注册的过程。

 

 

     至此,nacos 向服务端完成注册的流程就已经讲完了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Cloud Alibaba是一个开源的微服务框架,它是基于Spring Cloud的基础上,集成了阿里巴巴的一些组件和中间件,如Nacos、Sentinel、Dubbo等,提供了更加完善的微服务解决方案。它可以帮助开发者快速构建分布式应用,提高开发效率和系统可靠性。 ### 回答2: Spring Cloud Alibaba是一个集成了阿里巴巴的开源分布式应用服务器和Spring Cloud框架的解决方案。它提供了一整套微服务开发方案,包括服务发现、分布式配置、流量管理、消息总线、熔断器、分布式锁、分布式事务等一系列组件,可满足微服务应用的开发和部署所需。 Spring Cloud Alibaba的特点如下: 1. 服务注册与发现:Nacos作为注册中心,可集中管理和实时发现服务实例,支持DNS和HTTP两种服务发现方式。 2. 服务配置管理:Nacos Config作为配置中心,可动态更新配置,实现灰度发布和动态路由等功能。 3. 消息总线:RocketMQ作为消息总线,支持多种通信模式,实现消息的同步传输、异步传输和顺序传输等。 4. 路由网关:Spring Cloud Gateway和Alibaba Gateway可实现API接口的路由和转发,支持高并发和动态路由。 5. 熔断器和限流:Sentinel作为熔断器和限流框架,可实时监控流量并限制请求,防止系统负载过高和崩溃。 6. 分布式锁和事务:Seata作为分布式事务框架,可实现分布式事务的一致性和隔离性,同时支持分布式锁和高可用性。 总之,Spring Cloud Alibaba提供了一系列相互协作的分布式组件,可帮助开发者实现高可用性、高可靠性和高性能的微服务架构,是微服务开发的必备工具之一。 ### 回答3: Spring Cloud Alibaba是在Spring Cloud和阿里巴巴开源技术的基础上,综合运用阿里巴巴的多个产品,打造的一种分布式应用开发框架。相比于原生的Spring CloudSpring Cloud Alibaba更加注重对于微服务治理和容错能力的强化,同时还提供了一些新的组件和功能,以更好地支持云原生应用的开发和运行。 Spring Cloud Alibaba的核心组件包括: 1. Nacos:一个更加强大的服务发现和配置中心,支持多种协议和数据格式,还提供了一些特别的功能,比如动态配置,事件监控,流量管理等。 2. Sentinel:一个轻量级的流量控制和熔断降级框架,支持实时的流量统计,规则配置和管理等功能,可以在高并发场景下保证系统的稳定性和可靠性。 3. RocketMQ:一个分布式的消息中间件,支持多种消息传输模式和数据格式,还提供了丰富的生产者和消费者API,可以广泛地应用于异步通信、事件驱动等场景。 4. Alibaba Cloud OSS:一个可扩展的对象存储服务,可以存储海量的数据,支持多种存储策略和API,同时还提供了一些高级功能,比如防盗链、限制访问等。 此外,Spring Cloud Alibaba还支持一些其他的特性和功能,比如阿里云SDK的集成、Dubbo协议的支持、分布式事务服务等。总的来说,Spring Cloud Alibaba是一个强大的分布式应用开发框架,可以帮助开发人员迅速搭建微服务应用,提高系统的可用性和稳定性,以应对日益复杂的业务需求和高并发场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值