Nacos源码 (7) Nacos与Spring
SpringCloud工程可以使用Nacos作为注册中心和配置中心,配置和使用非常简单,本文将简单介绍使用方式,并分析其实现方式。
SpringCloud工程集成Nacos
SpringCloud工程使用Nacos非常简单,只需要引入依赖、编写配置参数、在启动类上添加注解即可。
引入依赖
<dependencyManagement>
<dependencies>
<!-- Spring Cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud Alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
bootstrap.yml配置文件
spring:
application:
name: xx-service
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
prefix: ${spring.application.name}
file-extension: yml
group: DEFAULT_GROUP
server-addr: localhost:8848
extension-configs:
- data-id: base-config-${spring.profiles.active}.yml
group: DEFAULT_GROUP
refresh: true
- data-id: resource-config-${spring.profiles.active}.yml
group: DEFAULT_GROUP
refresh: true
配置中心源码分析
配置中心集成的源码在spring-cloud-starter-alibaba-nacos-config工程中。
spring.factories文件
# Configuration配置类
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.alibaba.cloud.nacos.NacosConfigBootstrapConfiguration
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.nacos.NacosConfigAutoConfiguration,\
com.alibaba.cloud.nacos.endpoint.NacosConfigEndpointAutoConfiguration
org.springframework.boot.diagnostics.FailureAnalyzer=\
com.alibaba.cloud.nacos.diagnostics.analyzer.NacosConnectionFailureAnalyzer
# 这里是Nacos扩展的支持json和xml的PropertySourceLoader
org.springframework.boot.env.PropertySourceLoader=\
com.alibaba.cloud.nacos.parser.NacosJsonPropertySourceLoader,\
com.alibaba.cloud.nacos.parser.NacosXmlPropertySourceLoader
NacosConfigBootstrapConfiguration
装配NacosConfigProperties、NacosConfigManager、NacosPropertySourceLocator等组件:
- NacosConfigProperties - 封装spring.cloud.nacos.config配置参数
- NacosConfigManager - 用于获取ConfigService对象
- NacosPropertySourceLocator - 用于加载配置封装PropertySource
注册中心源码分析
注册中心集成的源码在spring-cloud-starter-alibaba-nacos-discovery工程中。
spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration,\
com.alibaba.cloud.nacos.ribbon.RibbonNacosAutoConfiguration,\
com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\
com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\
com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\
com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration,\
com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration,\
com.alibaba.cloud.nacos.NacosServiceAutoConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration
NacosDiscoveryClientConfigServiceBootstrapConfiguration
import了几个其他的配置类:
- NacosDiscoveryAutoConfiguration.class
- NacosServiceAutoConfiguration.class
- NacosDiscoveryClientConfiguration.class
- NacosReactiveDiscoveryClientConfiguration.class
NacosDiscoveryAutoConfiguration
装配NacosDiscoveryProperties、NacosServiceDiscovery组件。
NacosServiceDiscovery类:用于获取注册中心的服务和实例。
RibbonNacosAutoConfiguration
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties
@ConditionalOnBean(SpringClientFactory.class)
@ConditionalOnRibbonNacos
@ConditionalOnNacosDiscoveryEnabled
@AutoConfigureAfter(RibbonAutoConfiguration.class)
// 使用NacosRibbonClientConfiguration装配NacosServerList
// NacosServerList用于获取注册到Nacos上的指定service的服务实例列表
@RibbonClients(defaultConfiguration = NacosRibbonClientConfiguration.class)
public class RibbonNacosAutoConfiguration {
}
RibbonClients注解导入RibbonClientConfigurationRegistrar类,支持组合多个RibbonClient注解。
RibbonClientConfigurationRegistrar类会解析RibbonClients和RibbonClient注解,将相关配置类注入到registry中。
NacosDiscoveryEndpointAutoConfiguration
装配NacosDiscoveryEndpoint和NacosDiscoveryHealthIndicator组件:
- NacosDiscoveryEndpoint - 用于获取Nacos配置参数和订阅的服务
- NacosDiscoveryHealthIndicator - 健康检查
NacosServiceRegistryAutoConfiguration
装配以下组件:
NacosServiceRegistry
实现了ServiceRegistry接口,用于服务注册、服务下线
NacosRegistration
封装服务实例信息:instanceId、serviceId、host、port和metadata等信息
NacosAutoServiceRegistration
- 将服务注册到Nacos注册中心,内部维护NacosServiceRegistry和NacosRegistration组件
- 继承了AbstractAutoServiceRegistration抽象类,其register用于注册服务
- AbstractAutoServiceRegistration实现了ApplicationListener接口,监听WebServerInitializedEvent事件,在事件发生时做服务注册
NacosDiscoveryClientConfiguration
装配NacosDiscoveryClient和NacosWatch组件。
Nacos源码 (7) Nacos与Spring的更多相关文章
- Nacos源码结构和AP模式注册中心实现介绍
前言 NacosAP模式源码分析目录 微服务下的注册中心如何选择 Nacos使用和注册部分源码介绍 Nacos服务心跳和健康检查源码介绍 Nacos服务发现 Nacos源码结构介绍 Nacos版本基于 ...
- Nacos源码系列—关于服务注册的那些事
点赞再看,养成习惯,微信搜索[牧小农]关注我获取更多资讯,风里雨里,小农等你,很高兴能够成为你的朋友. 项目源码地址:公众号回复 nacos,即可免费获取源码 简介 首先我们在看Nacos源码之前,要 ...
- 源码跟读,Spring是如何解析和加载xml中配置的beans
Spring版本基于: 跟踪代码源码基于: https://github.com/deng-cc/KeepLearning commit id:c009ce47bd19e1faf9e07f12086c ...
- 框架源码系列十:Spring AOP(AOP的核心概念回顾、Spring中AOP的用法、Spring AOP 源码学习)
一.AOP的核心概念回顾 https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/core.html#a ...
- spring源码分析系列 (3) spring拓展接口InstantiationAwareBeanPostProcessor
更多文章点击--spring源码分析系列 主要分析内容: 一.InstantiationAwareBeanPostProcessor简述与demo示例 二.InstantiationAwareBean ...
- 曹工说Spring Boot源码(7)-- Spring解析xml文件,到底从中得到了什么(上)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- 曹工说Spring Boot源码(8)-- Spring解析xml文件,到底从中得到了什么(util命名空间)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- 曹工说Spring Boot源码(9)-- Spring解析xml文件,到底从中得到了什么(context命名空间上)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- # 曹工说Spring Boot源码(10)-- Spring解析xml文件,到底从中得到了什么(context:annotation-config 解析)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- 曹工说Spring Boot源码(12)-- Spring解析xml文件,到底从中得到了什么(context:component-scan完整解析)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
随机推荐
- 如何 使 Java、C# md5 加密的值保持一致
Java C# md5 加密值保持一致,一般是编码不一致造成的值不同 JAVA (加密:123456) C#(加密:123456) UTF-8 e10adc3949ba59abbe56e057f20f ...
- 数字孪生和GIS融合后能够为城市交通带来哪些便利?
数字孪生和GIS的融合对于城市交通领域带来了诸多便利,从智能交通管理到出行体验的提升,为城市交通带来了全新的发展机遇. 首先,数字孪生技术与GIS的结合可以实现智能交通管理.通过GIS建立城市交通网络 ...
- STM32CubeMX教程5 TIM 定时器概述及基本定时器
1.准备材料 开发板(STM32F407G-DISC1) ST-LINK/V2驱动 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) 逻 ...
- Python——第二章:字典的循环、嵌套、"解构"(解包)
字典进阶操作 -- 循环和嵌套 字典的循环 我们先看直接打印字典的样子,会分别对每对key:value进行打印,并使用,分隔他们 dic = { "赵四": "特别能歪嘴 ...
- Windows Server 2012 R2 无法更新问题
Windows Server 2012 R2 无法更新问题 新安装的ISO镜像由于年久失修,原先的Update服务器可能已经失效,需要安装更新补丁,才可以正常指向新的更新服务器,甚至连系统激活(输入正 ...
- 通过腾讯网页快捷登录协议截取 QQ邮箱 的 QQClientkey / QQKey 教程
最近发现之前的老代码已经不能获取QQ邮箱的Clientkey,经过一番调试后发现QQ邮箱更新了获取的流程,所以决定重新发布一篇文章,废话不多,直接上教程,喜欢的朋友记得点赞加关注. step 1 首先 ...
- 文心一言 VS 讯飞星火 VS chatgpt (30)-- 算法导论5.2 2题
二.在 HIRE-ASSISTANT 中,假设应聘者以随机顺序出现,你正好雇用两次的概率是多少? 文心一言: 我们可以先计算出在HIRE-ASSISTANT中,雇佣一个应聘者的概率为3/4,然后计算出 ...
- SaaS 营销怎么做?几点思考
按大部分 SaaS 公司组织架构,梳理了这 4 大业务部门(产品.市场.销售.服务-客户成功)的职责和客户价值链条.如图: 根据客户价值体验地图,分为两块过程: 客户营销过程 客户成功过程 针对 Sa ...
- 史上最强DIY,手工制作一只会说话的机器狗
摘要:波士顿动力的机器狗,想要么?快来跟我一起动手制作吧. 波士顿动力的机器狗了解吗? 一个会后空翻.会开门.会爬楼梯的AI. 最近,我们实验室就来了一批mini版的机器狗,虽然不会各种高难度杂技动作 ...
- 鸿蒙轻内核M核源码分析:数据结构之任务就绪队列
摘要:本文会给读者介绍鸿蒙轻内核M核源码中重要的数据结构,任务基于优先级的就绪队列Priority Queue. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列三 数据结构-任务就绪队列> ...