您现在的位置是:首页 >技术教程 >Nacos Spring ⽣态网站首页技术教程

Nacos Spring ⽣态

卡布奇诺-海晨 2023-05-14 20:00:02
简介Nacos Spring ⽣态

目录

一、Nacos与Spring

二、项目简介

三、主要注解

1、@NacosValue 动态刷新配置

2、关注的 Bean 范围

3、动态刷新

4、@NacosPropertySource 动态获取配置 

💖微服务实战

💖 Spring家族及微服务系列文章 


一、Nacos与Spring

Nacos 无缝支持 Spring 全栈,将 Java 体验做到极致。Nacos 在开源之初就跟 Spring 生态做了
无缝整合,让用户注解驱动业务开发,并且跟底层实现解耦,提升研发效率。

二、项目简介

    Nacos-spring-boot 项目 Nacos-spring 项目 是为 Spring 用户提供的项目,本质是提升 Java用户的编程体验和效率。其本质是通过⼀个开箱即用的框架,将 Nacos 客户端和 Spring-Boot 项目桥接起来(如下图中两个红框),使 SpringBoot 用户可以方便的在业务代码中引入 Nacos 服务端的配置(而不仅仅从 application.properties 中读取)。这样,便使得中间件团队和业务团队的开发任务充分解耦合。

本文从代码实现入手,为大家剖析 Nacos-spring 系列项目的生态支持。Nacos-spring-boot 项目
的依赖关系为:

三、主要注解

为了实现 SpringBoot 和 Nacos-Client 的桥接,Nacos-spring 系列项目提供了丰富的注解语义。

1、@NacosValue 动态刷新配置

@NacosValue 这个注解是通过 NacosValueAnnotationBeanPostProcessor 类来处理的。

2、关注的 Bean 范围

由上面两张图可以看出,NacosValueAnnotationBeanPostProcessor 实现了 AbstractAnnotationB eanPostProcessor,并且通过调用父类的构造方法,将其进行处理的 bean 的范围划在了所有打了 Value 标记的注解上。

3、动态刷新

每次 Nacos-client 端收到相应的 dataId 变更之后,都会触发 NacosConfigReceivedEvent;而下图中的这个方法则会接收到这个事件,并且计算出新的 evaluatedValue。

计算出新的 evaluatedValue 之后,通过 setFiled 进行更新。

整个动态刷新过程就是这样完成的。

4、@NacosPropertySource 动态获取配置 

Nacos 的 @NacosPropertySource 注解可以从 Nacos 服务端拉取相应的配置。@NacosPropertySource 注解主要是由下图中的 NacosPropertySourcePostProcessor 类来处理,该类实现了 BeanFactoryPostProcessor,作为⼀个钩子类,会在所有 spring bean 定义生成后、实例化之前调 用。

在所有 spring bean 定义生成后、实例化之前,下图中的方法会被调用:他的使命是进行注解的扫描,扫描由 spring 所有的 bean,查看其类上是否有 @NacosPropertySource 注解,如果有的话, 则生成。

从最后⼀张图中,可以看到在 receiveConfigInfo 的回调逻辑中,当有配置变更的时候,会重新生成 NacosPropertySource,并且替换掉 environment 中过时的 NacosPropertySource,完成这个步骤之后,就可以通过 environment.getProperty() 动态的获取到配置值了。但问题是,@Value 方式注入的 Bean 对象的配置项是无法动态刷新的,因为 Bean 已经生成无法再更改;为了实现动态的刷新,Nacos 又引入了 @NacosValue 注解。

💖微服务实战

【微服务】SpringCloud的OpenFeign与Ribbon配置

集Oauth2+Jwt实现单点登录

Spring Cloud Alibaba微服务第29章之Rancher

Spring Cloud Alibaba微服务第27章之Jenkins

Spring Cloud Alibaba微服务第24章之Docker部署

Spring Cloud Alibaba微服务第23章之Oauth2授权码模式

Spring Cloud Alibaba微服务第22章之Oauth2

Spring Cloud Alibaba微服务第21章之分布式事务

Spring Cloud Alibaba微服务第18章之消息服务

Spring Cloud Alibaba微服务第16章之服务容错

Spring Cloud Alibaba微服务第14章之分库分表

Spring Cloud Alibaba微服务第11章之MyBatis-plus

Spring Cloud Alibaba微服务第8章之OpenFeign

Spring Cloud Alibaba微服务第7章之负载均衡Ribbon

SpringCloud Alibaba微服务第6章之Gateway

SpringCloud Alibaba微服务第4章之Nacos

SpringCloud Alibaba微服务开篇

💖 Spring家族及微服务系列文章 

【Spring】一文带你吃透IOC容器技术

【微服务】SpringCloud中OpenFeign请求处理及负载均衡流程

【微服务】SpringCloud中Ribbon的WeightedResponseTimeRule策略

【微服务】SpringCloud中Ribbon的轮询(RoundRobinRule)与重试(RetryRule)策略

【微服务】SpringCloud中Ribbon集成Eureka实现负载均衡

【微服务】SpringCloud轮询拉取注册表及服务发现源码解析

【微服务】SpringCloud微服务续约源码解析

【微服务】SpringCloud微服务注册源码解析

【微服务】Nacos2.x服务发现?RPC调用?重试机制?

【微服务】Nacos通知客户端服务变更以及重试机制

【微服务】Nacos服务发现源码分析

【微服务】SpringBoot监听器机制以及在Nacos中的应用

【微服务】Nacos服务端完成微服务注册以及健康检查流程

【微服务】Nacos客户端微服务注册原理流程

【微服务】SpringCloud中使用Ribbon实现负载均衡的原理

【微服务】SpringBoot启动流程注册FeignClient

【微服务】SpringBoot启动流程初始化OpenFeign的入口

Spring Bean的生命周期

Spring事务原理

SpringBoot自动装配原理机制及过程

SpringBoot获取处理器流程

SpringBoot中处理器映射关系注册流程

Spring5.x中Bean初始化流程

Spring中Bean定义的注册流程

Spring的处理器映射器与适配器的架构设计

SpringMVC执行流程图解及源码

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。