0
点赞
收藏
分享

微信扫一扫

SpringCloud Alibaba学习笔记 ——(三、基于 Nacos 实现分布式注册中心)

SpringCloud Alibaba 基于 Nacos 实现分布式配置中心

  • 三、基于 Nacos 构建分布式配置中心
  • 3.1 回顾 Nacos
  • 3.2 分布式配置中心产生背景?
  • 3.3 分布式配置中心架构原理
  • 3.4 实现 nacos 配置中心的功能
  • 3.5 Nacos 实现多环境不同配置

Author: Gorit

Date:2020年12月

Refer:阿里云大学

2021年发表博文: 8/30

三、基于 Nacos 构建分布式配置中心

3.1 回顾 Nacos

Nacos 是 阿里巴巴的开源框架,提供如下两种功能:

  1. 注册中心
  2. 分布式配置中心

分布式配置中心:

  1. Zookeeper
  2. SpringCloudConfig
  3. 携程阿波罗

3.2 分布式配置中心产生背景?

传统项目出现的问题:

在项目中定义配置文件,最大的缺陷,如果在生产环境正在运行时突然需要修改配置文件,必须重启服务器。

分布式配置中心的概念?

使用专门的服务器统一存放管理我们整个微服务的配置文件,能够完全动态的实现对我们配置文件修改,新增,是不需要重启我们的服务器的。

有哪些分布式配置中心?

  1. 携程阿波罗(属于比较重量级的分布式配置中心)学习成本高
  2. Nacos(属于轻量级)部署、架构设计比较简单,学习成本低
  3. SpringCloud Config(没有界面)

3.3 分布式配置中心架构原理

如何判断配置文件是否法还是能变化

采用版本 | MD5

分布式配置中心实现原理:

  1. 本地应用读取我们云端分布式配置中心文件(第一次建立长连接)
  2. 本地应用读取到配置文件之后,本地 jvm 和硬盘都会缓存一份
  3. 本地应用于分布式配置中心服务端一直保持长连接
  4. 当我们配置文件发生变化(MD5|版本号)实现区分,将变化结果及时通知我们的本地应用并及时刷新我们的配置文件

完全百分之百动态修改我们的配置文件

在这里插入图片描述

SpringCloud Alibaba学习笔记 ——(三、基于 Nacos 实现分布式注册中心)_spring

注意:Nacos 分布式配置中心 和 注册中心都部署在同一个应用,就是一个单体应用

Nacos 使用配置中心发布规则

  1. DataId 名称:默认情况服务名称-版本.yml | properties

注意事项:nacos 本地如果也配置的话,可能启动时会抛出异常

bootstrap 与 application 区别

  1. 前者属于整个应用程序,最先被加载
  2. 后者针对当前 springApplication 的 ApplicaitonContext 加载

3.4 实现 nacos 配置中心的功能

  1. 新建一个 Maven 项目,导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos 整合注册中心 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
<!-- nacos 整合分布式配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.3.RELEASE</version>
</dependency>
</dependencies>
  1. 创建 application.yml 和 bootstrap.yml

application.yml

spring:
application:
name: gorit-member
cloud:
nacos:
# 注册中心
discovery:
server-addr: 127.0.0.1:8848
# 配置中心
config:
server-addr: 127.0.0.1:8848
group: DEFAULT_GROUP
file-extension: properties # 默认是 properties,还可以是 yaml
server:
port: 8082

bootstrap.yml (这里一般都是自定义配置文件)

gorit:
name: Gorit 牛逼

编写 SpringBoot 启动类,并添加 RestController 注解,编写一个 config 接口

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class);
}

@Value("${gorit.name}")
private String goritConfig;


@GetMapping("/config")
public String getConfig() {
return goritConfig;
}
}

启动 nacos,启动项目SpringCloud Alibaba学习笔记 ——(三、基于 Nacos 实现分布式注册中心)_spring_02

进入 nacos,并新建一个配置SpringCloud Alibaba学习笔记 ——(三、基于 Nacos 实现分布式注册中心)_spring boot_03

DataId为我们的服务名.properties,因为我们在 application.yml 中 file-extension 指定使用 properties 文件,当然也可以改成 yaml。所以可以这么写

SpringCloud Alibaba学习笔记 ——(三、基于 Nacos 实现分布式注册中心)_spring boot_04

写好之后,发布配置。我们可以看到控制台刷新了一下

SpringCloud Alibaba学习笔记 ——(三、基于 Nacos 实现分布式注册中心)_spring_05

然后再回到上面的前端页面,发现改变了

实现配置文件自动刷新,用到了 @RefreshScope 注解

3.5 Nacos 实现多环境不同配置

gorit-member-dev.properties

gorit-member-pro.properties

创建两个对应的 配置,然后在 application.yml 中添加对应的版本信息

profiles:
active: dev

运行即可看到效果

nacos 中默认嵌入小型数据库 单机版本 实现对我们 nacos 集群

Nginx 实现 nacos 集群部署

下一节

Nacos 实现集群部署原理

举报

相关推荐

0 条评论