Spring Cloud Alibaba之Nacos

Nacos 服务注册中心 统一配置中心

什么是Nacos Name Service & Configurations Services

 

- https://nacos.io/zh-cn/index.html
- Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
  • 总结:Nacos就是微服务架构中服务注册中心以及统一配置中心,用来替换原来的(eureka,consul)以及config组件

安装Nacos

# 0.准备环境
- 1.64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
- 2.64 bit JDK 1.8+;下载 & 配置。
- 3.Maven 3.2.x+;下载 & 配置。
​
# 1.下载nacos [本次课程版本:][1.3.0版本]
- https://github.com/alibaba/nacos/releases 

Spring Cloud Alibaba之Nacos_第1张图片

 

# 2.解压缩安装包到指定位置
- bin           启动nacos服务的脚本目录
- conf          nacos的配置文件目录
- target        nacos的启动依赖存放目录
- data        nacos启动成功后保存数据的目录
# 3.启动安装服务
- linux/unix/mac启动
    打开终端进入nacos的bin目录执行如下命令 
    ./startup.sh -m standalone
​
- windows启动
    在 cmd中 
    执行 startup.cmd -m standalone 或者双击startup.cmd运行文件。
# 4.访问nacos的web服务管理界面
- http://localhost:8848/nacos/
- 用户名 和 密码都是nacos

Spring Cloud Alibaba之Nacos_第2张图片

 

开发服务注册到nacos

# 0.创建项目并引入依赖


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery

# 1.配置注册地址
server.port=8789                                                                                                                #指定当前服务端口
spring.application.name=nacosclient                                                                         #指定服务名称
spring.cloud.nacos.server-addr=localhost:8848                                                       #指定nacos服务地址
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr} #指定注册中心地址                            
management.endpoints.web.exposure.include=*                                                       #暴露所有web端点
# 2.加入启动服务注册注解 [注意:][新版本之后这步可以省略不写]

 

# 3.查看nacos的服务列表

 

使用nacos作为配置中心

1.从nacos获取配置

# 1.创建项目并引入nacons配置中心依赖


  com.alibaba.cloud
  spring-cloud-starter-alibaba-nacos-discovery


   com.alibaba.cloud
   spring-cloud-starter-alibaba-nacos-config

# 2.配置配置中心地址
spring.cloud.nacos.server-addr=localhost:8848                               # 远程配置中心的地址
spring.cloud.nacos.config.server-addr=${spring.cloud.nacos.server-addr}   # 去指定nacos地址读取配置
spring.cloud.nacos.config.group=DEFAULT_GROUP                               # 读取配置的分组
spring.cloud.nacos.config.file-extension=properties                 # 指定读取文件后缀
spring.application.name=config                                                          # 指定读取文件的前缀
spring.profiles.active=prod                                                                 # 指定读取文件的具体环境

# 3.在nacos中创建配置

Spring Cloud Alibaba之Nacos_第3张图片

Spring Cloud Alibaba之Nacos_第4张图片 

 

# 4.编写控制器测试配置读取情况
@RestController
@Slf4j
public class HelloController {
    //注入配置
    @Value("${user.name}")
    private String username;
    @GetMapping("/hello/config")
    public String config(){
        log.info("用户名: [{}]",username);
        return username;
    }
}

Spring Cloud Alibaba之Nacos_第5张图片

 

# 5.启动项目方式测试配置读取

2. DataId

 

# 1.DataId
- 用来读取远程配置中心的中具体配置文件其完整格式如下:
- ${prefix}-${spring.profile.active}.${file-extension}
    a. prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
    
    b. spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
    
    c. file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

3.实现自动配置刷新

# 1.自动刷新
- 默认情况下nacos已经实现了自动配置刷新功能,如果需要刷新配置直接在控制器中加入@RefreshScope注解即可
@RestController
@Slf4j
@RefreshScope
public class HelloController {
    //注入配置
    @Value("${user.name}")
    private String username;
    @GetMapping("/hello/config")
    public String config(){
        log.info("用户名: [{}]",username);
        return username;
    }
}

4.命名空间

# 1.命名空间(namespace)
- https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
- namespace命名空间是nacos针对于企业级开发设计用来针对于不同环境的区分,比如正在企业开发时有测试环境,生产环境,等其他环境,因此为了保证不同环境配置实现隔离,提出了namespace的概念,默认在nacos中存在一个public命名空间所有配置在没有指定命名空间时都在这个命名空间中获取配置,在实际开发时可以针对于不能环境创建不同的namespace空间。默认空间不能删除!

Spring Cloud Alibaba之Nacos_第6张图片

 

# 2.创建其他命名空间
- 每个命名空间都有一个唯一id,这个id是读取配置时指定空间的唯一标识

Spring Cloud Alibaba之Nacos_第7张图片

 

 

# 3.在配置列表查看空间

 

# 4.在指定空间下载创建配置文件

Spring Cloud Alibaba之Nacos_第8张图片

 

# 5.项目中使用命名空间指定配置

 

# 6.测试配置

 

5.配置分组

# 1.配置分组(group)
- 配置分组是对配置集进行分组,通过一个有意义的字符串(如 Buy 或 Trade )来表示,不同的配置分组下可以有相同的配置集(Data ID)。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:可用于区分不同的项目或应用,例如:学生管理系统的配置集可以定义一个group为:STUDENT_GROUP。

 

# 2.创建分组

Spring Cloud Alibaba之Nacos_第9张图片

 

 

# 3.读取不同分组的配置


 

6.数据持久化

安装Mysql

# 0.在centos7安装
- a)卸载mariadb,否则安装mysql会出现冲突
- b)执行命令 rpm -qa | grep mariadb 搜索mariadb
- c)列出所有被安装的mariadb rpm 包
- d)执行命令rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

在线安装

#1.添加官方的yum源创建并编辑mysql-community.repo文件
#2.vi /etc/yum.repos.d/mysql-community.repo
​
#3.粘贴以下内容到源文件中
​
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/       
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
​
#注意:如果需要安装mysql5.7 只需要将baseurl修改即可
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
​
#4.安装mysql数据库
yum -y install mysql-community-server

启动Mysql服务

#安装mysql完成之后会在系统中自动添加一个mysqld服务
​
启动: systemctl start mysqld
关闭: systemctl stop mysqld
重启: systemctl restart mysqld
状态: systemctl status mysqld

登陆Mysql

# 1.先设置root的用户密码
    注意:  //root h%Gq:k&zb3oX
    mysql 5.6 安装完成之后没有默认密码
    mysql 5.7 安装完成之后生成临时密码,
    使用命令 grep 'temporary password' /var/log/mysqld.log 读出来即可
# 2.修改密码
    mysqladmin -u root -p password   
    5.6 没有原密码直接回车
    5.7 有原密码,需要写出查询到的原密码    新密码:Root!@12
# 3.登录MySql
    mysql -u用户名 -p密码
    mysql -uroot -proot
# 4.查询 mysql中有哪些库
    show databases;

开启远程访问权限

# 1.连接之前需要关闭Linux服务器中的防火墙
	systemctl stop firewalld
	systemctl disable firewalld

# 2.选择使用mysql中MySQL库
	use mysql;
# 3.	变更host中的localhost 
    grant all privileges on *.* to 'root'@'%' identified by 'Root!@12' with grant option;
# 4.修改完成后刷新mysql的权限
		flush privileges;
# 5.Navicat连接远程MySql,新建的表编码格式设置为utf-8

从新启动Nacos

#1.关闭原有Nacos服务
#2.进入nacos的bin执行
./startup.sh -m standalone

你可能感兴趣的:(微服务框架之spring,cloud,java,spring,cloud)