阿里巴巴版本: 2.2.1
Boot版本: 2.2.5
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.
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
# 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>
- 官网:https://nacos.io/zh-cn/index.html
- GitHub地址:https://github.com/alibaba/nacos
- Nacos 致力于帮助您发现、配置和管理微服务。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
# 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运行文件。
# 6.访问nacos的web服务管理界面
- http://192.168.204.133:8848/nacos/ # nacos的默认端口就是8848,注:关闭防火墙
- 用户名 和 密码 都是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启动服务注册注解 [注意:][新版本之后这步可以省略不写]
# 3.查看nacos的服务列表
alibaba并没有提供服务间的通信组件,所以我们还是沿用之前的 Openfeign 或 RestTemplate + Ribbon
# 服务间通信
服务间通信以及负载均衡 =====> a.RestTemplate+Ribbon 或 b. Openfeign[推荐]
推荐使用Openfeign
详细请看:SpringCloud中服务间通信方式以及Ribbon、Openfeign组件的使用
# nacos作为配置中心时
1.它管理配置文件方式是在自己所在服务器上形成一个版本库,因此不需要再创建远程版本库
2.ncos作为统一配置中心管理配置文件时,同样也是存在版本控制
# 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
# 3.在nacos中创建配置
在nacos中创建配置文件,配置文件名称要和项目中bootstrap.properties中配置的名称一致,注:配置文件的名称建议为项目服务名且要带上具体环境,例如:configclient-prod.properties
注:建议选择格式为TXT,因为选properties有许多限制,选择TXT可以加注释等等,这里选的只是展示的格式,拉到本地还是以文件后缀 .properties 格式。
# 4.启动项目方式测试配置读取
# 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;
}
}
比如远端配置文件 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,如果要改的话只能删了整个配置文件再重新创建
# 1.命名空间(namespace)
- https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
- namespace命名空间是nacos针对于企业级开发设计用来针对于不同环境的区分,比如正在企业开发时有测试环境,生产环境,等其他环境,因此为了保证不同环境配置实现隔离,提出了namespace的概念,默认在nacos中存在一个public命名空间,所有配置在没有指定命名空间时都在这个命名空间中获取配置,在实际开发时可以针对于不同环境创建不同的namespace空间。默认空间不能删除!
总结:站在项目的角度隔离每一个项目的配置文件
# 2.创建其他命名空间
- 每个命名空间都有一个唯一id,这个id是读取配置时指定空间的唯一标识
# 3.在配置列表查看空间
# 4.在指定空间下载创建配置文件
# 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
# 6.测试配置
# 1.组(group)
- 是对配置集进行分组,通过一个有意义的字符串(如 Buy 或 Trade )来表示,不同的组下可以有相同的配置集(Data ID)。当您在 Nacos 上创建一个配置时,如果未填写组的名称,则组的名称默认采用 DEFAULT_GROUP 。组的常见场景:可用于区分一个系统中的不同的微服务,例如:一个项目中的 用户服务、部门服务。
总结:站在一个项目中每个服务角度,隔离同一个项目中的不同服务的配置
# 2.创建分组
# 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
远端配置文件的唯一标识(名字)
# 导出配置
会将选中的配置打包下载
# 导入配置
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
# 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内嵌的数据库中。
# 集群 cluster : 统一种软件服务的多个节点对一个系统提供服务称之为这个软件服务集群 tomcat集群 mysql集群 redis集群 es集群...
集群解决问题:
1.并发访问压力
2.单节点故障问题
# 1.nacos集群架构图
- https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
# 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进行测试即可