Spring Cloud Alibaba 中 Nacos 组件的使用

Spring Cloud Alibaba 微服务工具集

阿里巴巴版本: 2.2.1

Boot版本: 2.2.5

1.简介

Spring Cloud Alibaba provides a one-stop solution for distributed application development. It contains all the components required to develop distributed applications, making it easy for you to develop your applications using Spring Cloud.

  • spring cloud 用来解决微服务系统中(分布式系统)解决方案
  • spring cloud alibaba 用来解决微服务系统中解决方案

With Spring Cloud Alibaba, you only need to add some annotations and a small amount of configurations to connect Spring Cloud applications to the distributed solutions of Alibaba, and build a distributed application system with Alibaba middleware.

# 0.原文翻译
- https://spring.io/projects/spring-cloud-alibaba
- 阿里云为分布式应用开发提供了一站式解决方案。它包含了开发分布式应用程序所需的所有组件,使您可以轻松地使用springcloud开发应用程序。
- 有了阿里云,你只需要添加一些注解和少量的配置,就可以将Spring云应用连接到阿里的分布式解决方案上,用阿里中间件搭建一个分布式应用系统。

# 1. spring cloud alibaba 特点
- a.服务降级和流量控制           sentinel        替换   hystrix
- b.服务注册与发现			    nacos          替换    eureka  consul
- c.统一配置中心   				nacos          替换    config 
- d.事件驱动总线                  RocketMQ       替换    bus


- e.分布式事务                   seta
- f.dubbo RPC

# 2.springcloud 组件
- 服务注册与发现组件   eureka  consul                     nacos
- 服务间通信组件      restTemplate+ribbon,Openfeign      restTemplate+ribbon,Openfeign
- 服务降级和熔断      hystrix hystrix dashboard          sentinel
- 服务网关组件        gateway                            gateway
- 统一配置中心组件 消息总线组件   config  bus               nacos


# 3.微服务项目实战开发 SpringCloud Netflix + SpringCloud Spring + SpringCloud alibaba
	日后开发的时候是三套组件一起混着用
	
	1. 服务注册中心  			   =====>   Nacos
	2. 服务间通信以及负载均衡     =====>   a.RestTemplate+Ribbon 或 b. Openfeign[推荐]
	3. 服务流控和服务降级		   =====>   Sentinel
	4. 服务网管组件              =====>   Gateway
	5. 统一配置中心组件		   =====>   Nacos

2.环境搭建

# 0.构建父项目并引入依赖
	
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.2.5.RELEASEversion>
    parent>

    
    <properties>
        <spring.cloud.version>Hoxton.SR6spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.1.RELEASEspring.cloud.alibaba.version>
    properties>

    
    <dependencyManagement>
        <dependencies>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>${spring.cloud.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
            
            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                <version>${spring.cloud.alibaba.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>


3.Nacos

什么是Nacos Name Service(服务注册与发现) & Configurations Services(统一配置中心)

image-20200727202422243

- 官网:https://nacos.io/zh-cn/index.html
- GitHub地址:https://github.com/alibaba/nacos
- 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.1版本]
- https://github.com/alibaba/nacos/releases 

Spring Cloud Alibaba 中 Nacos 组件的使用_第1张图片

# 2.上传到nacos安装包到Linux中
# 3. 安装jdk环境,要求最好是 8.0+ 以后版本
因为Nacos是基于java写的,所以我们必须安装jdk环境
a. 上传jdk安装包
b. 使用rpm安装jdk   
c. 配置环境变量  
# 4.解压缩nacos安装包到指定位置
- tar -zxvf nacos-server-1.3.1.tar.gz               # 默认安装到了当前目录
进入nacos查看目录结构
    - bin  			启动和关闭nacos服务的一些脚本目录
    - conf 			nacos的配置文件目录
    - target 		nacos的核心jar包,来启动nacos server
    - data		  nacos启动成功后保存数据的目录
# 5.启动安装服务
- linux/unix/mac启动
	打开终端进入nacos的bin目录执行如下命令 
	cd bin
	./startup.sh -m standalone										    # standalone表示以单机模式[单个机器]启动

- windows启动
	在 cmd中 
	执行 startup.cmd -m standalone 或者双击startup.cmd运行文件。

image-20220909070630608

# 6.访问nacos的web服务管理界面
- http://192.168.204.133:8848/nacos/							 # nacos的默认端口就是8848,注:关闭防火墙
- 用户名 和 密码 都是nacos

Spring Cloud Alibaba 中 Nacos 组件的使用_第2张图片

开发服务注册到nacos

# 提前引入spring-boot-starter-web依赖,保证它是一个springboot应用
<dependencies>
  
  <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
  dependency>
dependencies>
# 0.创建项目并引入nacos依赖

<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
# 1.配置文件application.properties,nacos服务注册中心地址
server.port=8989
# 服务名  唯一  推荐  大写
spring.application.name=NACOSCLIENT

# 指定nacos服务地址   nacos既可以作为服务注册中心也可以作为统一配置中心
spring.cloud.nacos.server-addr=192.168.204.133:8848

# 指定注册中心地址,默认值就是 ${spring.cloud.nacos.server-addr},所以一般不写
#spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}

# 指定向nacos server注册的服务名称,默认值就是${spring.application.name},所以一般不写
#spring.cloud.nacos.discovery.service=${spring.application.name}
# 2.在入口类上加入@EnableDiscoveryClient启动服务注册注解 [注意:][新版本之后这步可以省略不写]

Spring Cloud Alibaba 中 Nacos 组件的使用_第3张图片

# 3.查看nacos的服务列表

image-20200727213221604

服务间通信方试

alibaba并没有提供服务间的通信组件,所以我们还是沿用之前的 Openfeign 或 RestTemplate + Ribbon

# 服务间通信
	服务间通信以及负载均衡   =====>   a.RestTemplate+Ribbon 或 b. Openfeign[推荐]

推荐使用Openfeign

详细请看:SpringCloud中服务间通信方式以及Ribbon、Openfeign组件的使用

使用nacos作为配置中心

# nacos作为配置中心时
1.它管理配置文件方式是在自己所在服务器上形成一个版本库,因此不需要再创建远程版本库
2.ncos作为统一配置中心管理配置文件时,同样也是存在版本控制

1.从nacos获取配置

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

提前引入springboot依赖

<dependencies>
  
  <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
  dependency>
dependencies>

<dependency>
  <groupId>com.alibaba.cloudgroupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>


<dependency>
   <groupId>com.alibaba.cloudgroupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>

# 2.配置配置中心地址
# 注意
修改项目本地的配置文件名称application.properties为bootstrap.properties
让当前项目在启动时预先拉取配置,在以拉取的配置信息启动,而不是直接以本地配置启动报错。
注:配置文件名称必须为 bootstrap
# 从哪个地址的nacos拉取
spring.cloud.nacos.config.server-addr=192.168.204.133:8848
# 从哪个组拉取
spring.cloud.nacos.config.group=DEFAULT_GROUP
# 从这个组中拉去哪个配置文件
spring.cloud.nacos.config.name=configclient-prod
# 这个配置的后缀(上面只是文件名,文件名+后缀才可以确定一个唯一的文件)
spring.cloud.nacos.config.file-extension=properties

Spring Cloud Alibaba 中 Nacos 组件的使用_第4张图片

# 3.在nacos中创建配置

在nacos中创建配置文件,配置文件名称要和项目中bootstrap.properties中配置的名称一致,注:配置文件的名称建议为项目服务名且要带上具体环境,例如:configclient-prod.properties

Spring Cloud Alibaba 中 Nacos 组件的使用_第5张图片

Spring Cloud Alibaba 中 Nacos 组件的使用_第6张图片

注:建议选择格式为TXT,因为选properties有许多限制,选择TXT可以加注释等等,这里选的只是展示的格式,拉到本地还是以文件后缀 .properties 格式。

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

Spring Cloud Alibaba 中 Nacos 组件的使用_第7张图片

2.实现自动配置刷新

# 1.自动刷新
- 在所需要实现自动刷新的controller上加上@RefreshScope注解即可
注:一般所有Controller都加上 @RefreshScope 注解 
@RestController
@RefreshScope                   // 允许远端配置修改时自动刷新
public class DemoController {

    @Value("${customer.username}")
    private String uesename;

    @GetMapping("/demo")
    public String demo(){
        System.out.println("demo ok!!!");
        return "demo ok !!! username:" + uesename;
    }
}

3. 获取配置文件的两种方式

比如远端配置文件 configclient-prod.properties

注:两种获取配置文件的方式选一种即可

# 1. 第一种获取配置文件方式
# 第一种获取配置文件方式 dataId = name + file-extension
# 从这个组中拉去哪个配置文件
spring.cloud.nacos.config.name=configclient-prod
# 这个配置的后缀(上面只是文件名,文件名+后缀才可以确定一个唯一的文件)
spring.cloud.nacos.config.file-extension=properties
# 2. 第二种获取配置文件的方式
# 第二种获取配置文件的方式 dataId = prefix + env + file-extension    (前缀 + 环境 + 后缀)
spring.cloud.nacos.config.prefix=configclient
spring.profiles.active=prod
spring.cloud.nacos.config.file-extension=properties
# 关于dataId
远端配置文件的名字,一旦创建远端配置文件无法修改 dataId,如果要改的话只能删了整个配置文件再重新创建

统一配置中心 nacos 的三个重要概念

1.命名空间 namespace

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

Spring Cloud Alibaba 中 Nacos 组件的使用_第8张图片

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

Spring Cloud Alibaba 中 Nacos 组件的使用_第9张图片

image-20200728221139206

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

image-20200728221221582

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

Spring Cloud Alibaba 中 Nacos 组件的使用_第10张图片

# 5.项目中使用命名空间指定配置
# 从哪个地址的nacos拉取
spring.cloud.nacos.config.server-addr=192.168.204.133:8848

# 从哪个命名空间获取配置
spring.cloud.nacos.config.namespace=180ad4f1-6d21-4837-b82d-e990f9cb0c6b
# 从哪个组拉取
spring.cloud.nacos.config.group=CONFIGCLIENT

# 第一种获取配置文件方式 dataId = name + file-extension
# 从这个组中拉去哪个配置文件
spring.cloud.nacos.config.name=configclient-dev
# 这个配置的后缀(上面只是文件名,文件名+后缀才可以确定一个唯一的文件)
spring.cloud.nacos.config.file-extension=properties

image-20200728223100749

# 6.测试配置

2.组 group

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

总结:站在一个项目中每个服务角度,隔离同一个项目中的不同服务的配置

image-20200728223745192

# 2.创建分组

Spring Cloud Alibaba 中 Nacos 组件的使用_第11张图片

image-20200728224034473

# 3.读取不同分组的配置
# 从哪个地址的nacos拉取
spring.cloud.nacos.config.server-addr=192.168.204.133:8848

# 从哪个命名空间获取配置
spring.cloud.nacos.config.namespace=180ad4f1-6d21-4837-b82d-e990f9cb0c6b
# 从哪个组拉取
spring.cloud.nacos.config.group=CONFIGCLIENT

# 第一种获取配置文件方式 dataId = name + file-extension
# 从这个组中拉去哪个配置文件
spring.cloud.nacos.config.name=configclient-dev
# 这个配置的后缀(上面只是文件名,文件名+后缀才可以确定一个唯一的文件)
spring.cloud.nacos.config.file-extension=properties

image-20200728224128019

3. dataId

远端配置文件的唯一标识(名字)

nacos中配置文件的迁移

# 导出配置
会将选中的配置打包下载

Spring Cloud Alibaba 中 Nacos 组件的使用_第12张图片

# 导入配置

Spring Cloud Alibaba 中 Nacos 组件的使用_第13张图片

Spring Cloud Alibaba 中 Nacos 组件的使用_第14张图片

Spring Cloud Alibaba 中 Nacos 组件的使用_第15张图片

查询配置文件历史版本

Spring Cloud Alibaba 中 Nacos 组件的使用_第16张图片

nacos持久化

nacos作为统一配置中心的持久化

# a. 在Linux系统中安装mysql    mysql版本要求:5.6.5+
# 1.说明
- 在0.7版本之前,在单机模式时nacos使用嵌入式数据库(derby)实现数据的存储,不方便观察数据存储的基本情况。
	0.7版本增加了支持mysql数据源能力,具体的操作步骤:
	1.安装数据库,版本要求:5.6.5+
	2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
	3.修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。

# 2.安装mysql数据库5.6.5+以上版本
- 添加官方的yum源创建并编辑mysql-community.repo文件
	vim /etc/yum.repos.d/mysql-community.repo
- 粘贴以下内容到mysql-community.repo源文件中

[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

- 安装mysql
	yum install mysql-community-server -y

- 启动mysql数据库
    systemctl start mysqld

- 首次安装需要修改mysql数据库默认的root用户的密码
	grep 'temporary password' /var/log/mysqld.log     # 5.7之后会生成临时密码,先获取这个临时密码
	mysqladmin -u root -p password 										# 使用临时密码登录然后修改root用户的密码
	回车 
	输入原始密码 																				# 5.7以后密码要求复杂点,例如 Root!Q2w
	输入新的密码
	再输入新的密码确认
	
- 登录mysql
    mysql -uroot -p'Root!Q2w' 											 # Root!Q2w 表示密码					
    
    
- 开启mysql远程连接权限:登录mysql之后执行如下命令

grant all privileges on *.* to 'root'@'%' identified by '填root用户密码' with grant option;

flush privileges;							# 修改完密码以后刷新一下权限,使开启远程连接生效
# b. nacos持久化到mysql数据库
# 1. 在mysql中创建一个数据库:nacos   编码一定要为 utf8

注:mysql的操作可以使用mysql图形客户端Navicat操作了,更方便
# 2. 在 nacos 库中执行nacos-mysql.sql脚本导入表  注:nacos-mysql.sql在nacos安装目录的conf目录中
	然后nacos库中就会出现一些存储nacos用到的一些表信息
# 3. 修改nacos的配置文件让它持久化信息到mysql中
修改nacos目录中 conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。

	cd nacos/conf/
	vim application.properties

Spring Cloud Alibaba 中 Nacos 组件的使用_第17张图片

# 4. 然后重启nacos

进入 nacos 安装目录的 bin 目录,执行下面命令关闭nacos	
	cd nacos/bin/
	./shutdown.sh
然后启动 nacos ,在nacos安装目录的bin目录中执行下面命令启动nacos
	./startup.sh -m standalone
启动完成之后我们会发现 nacos 中我们之前的配置全部消失了,是因为之前我们使用的是nacos的内嵌数据库,数据
存到了它的内嵌数据库中,而这次我们配置了存到mysql中,因为首次配置使用,mysql中并没有存储配置,所以
nacos中没有任何配置,但是之后我们创建的配置都会存到mysql中,而不是nacos内嵌的数据库中。

nacos高可用

# 集群 cluster : 统一种软件服务的多个节点对一个系统提供服务称之为这个软件服务集群  tomcat集群  mysql集群  redis集群 es集群...
	集群解决问题:
						1.并发访问压力
						2.单节点故障问题
# 1.nacos集群架构图
- https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

Spring Cloud Alibaba 中 Nacos 组件的使用_第18张图片

# 2.集群搭建注意事项
- 注意: 
	a.3个或3个以上Nacos节点才能构成集群。
	b.要求虚拟机内存分配必须大于2G以上

# 3.集群规划
-	node cluster:
	10.15.0.3 8845 nacos01
	10.15.0.3 8846 nacos02
	10.15.0.3 8847 nacos03
	10.15.0.3 9090 nginx
	10.15.0.3 3306 mysql

# 4.搭建nacos集群
	1).将nacos安装包从新解压缩
	2).开启nacos mysql持久化
		 注意:数据库中不能存在原始数据
	3).修改nacos conf目录中cluster.conf文件添加所有集群节点
		10.15.0.3:8845
		10.15.0.3:8846
		10.15.0.3:8847			
	4).将修改后nacos复制三份 
		注意:修改为不同端口信息
	
	5).分别启动三台机器
		./startup.sh

# 5.安装Nginx
- 0.安装必要依赖
	yum install -y gcc pcre-devel zlib-devel
- 1.下载Nginx
	http://nginx.org/en/download.html

- 2.将Nginx上传到linux中,并解压缩
	 tar -zxvf nginx-1.11.1.tar.gz

- 3.查看Nginx安装目录
	[root@localhost nginx-1.11.1]# ls
	auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src

- 4.在Nginx安装目录中执行如下命令:(指定安装位置)
	./configure --prefix=/usr/nginx

- 5.执行上述命令后,执行如下命令:
	make && make install

# 6.配置nginx conf配置文件
	a.加入如下配置:
	upstream  nacos-servers {
    	server 10.15.0.3:8845;
		server 10.15.0.3:8846;
		server 10.15.0.3:8847;
	}
	b.修改
	location / {
      proxy_pass http://nacos-servers/;
  	}

# 7.启动nginx进行测试即可

你可能感兴趣的:(SpringCloud,java,spring,cloud,开发语言,后端,nacos)