目录
1.spring cloud alibaba 的出现
2.服务注册到nacos
3.服务注册中心对比
3.nacos做配置中心
3.1 基础配置
3.2 分类配置
4.nacos集群和持久化配置
spring cloud netflix 进入了维护阶段,将不再开发新的组件
yml配置:
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
框架 | cap模型 | 控制台管理 | 社区活跃度 |
euraka | AP | 支持 | 低 |
zookeeper | CP | 不支持 | 中 |
Consul | CP | 支持 | 高 |
Nacos | AP | 支持 | 高 |
C是所有节点在同一时间看到的数是一致的。而A的定义是所有的请求都会受到响应。
一般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式,当前主流的服务如spring cloud和Dubbo服务,都适用于AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。
如果需要在服务级别编辑或者存储配置信息,那么cp是必须,K8S服务和DNS服务则适用于CP模式。CP模式支持注册持久化实例,此时则是以Raft协议我集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则返回错误。
nacos支持AP与CP的切换
curl -X PUT '$nacos_server:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP
pom配置:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot中配置文件的加载顺序存在优先级顺序的,bootstrap优先级高于application
yml配置:
spring:
cloud:
nacos:
config:
server-addr: localhost:8848
file-extension: yaml
namespace+group+dataId
1.nacos之group分组
配置文件yml中,增加group:组名
2.nacos之namespace空间方案
配置文件yml中,增加namespace: id
默认nacos使用嵌入式数据库实现数据的存储,所以,如果启动多个默认配置下的nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持mysql的存储。
nacos默认自带的嵌入式数据库derby
derby到mysql的切换步骤:
nacos-server\nacos\conf目录下找到sql脚本,执行sql;
nacos-server\nacos\conf目录下找到application.properties 配置mysql连接信息
集群配置:
nacos-server/nacos/conf/cluster.conf.example
cp cluster.conf.example cluster.conf
vim cluster.conf:
192.168.111.133:3333
192.168.111.144:4444
192.168.111.155:5555
修改start.sh启动脚本
raft协议强依赖Leader节点来确保集群数据一致性。即client发送过来的数据先到达leader节点,leader接受到数据后,先将数据标记为uncommited状态,随后leader节点开始向所有follower复制数据并等待响应,在获得集群中大于N/2个Follower的已经成功接收数据完毕响应后,Leader将数据的状态标记为committed,随后向client发送数据已经接收确认,在向client发出数据接收后,再向所有Follower节点发送通知表名该数据状态为committed。
nacos server 有两种运行模式:1.standalone 单节点模式 2.cluster 集群模式
-m 用于指定启动方式 或 startup.cmd中设置 set MODE="standalone";
springboot 2.4之后的版本必须引入:
org.springframework.cloud
spring-cloud-starter-bootstrap
否则无法读到bootstrap.yml文件
公共配置文件的common.yml的读取配置:
spring:
cloud:
nacos:
config:
extend-config[0]:
data-id: common.yml
refresh: true
extend-config[N] N值越大,配置优先级越高。
spring cloud gateway具备一些网关的高级功能:动态路由、限流、路径重写
配置:
spring:
cloud:
gateway:
routes:
- id: url-proxy
url: https://blog.csdn.net
predicates:
- Path=/csdn
路由是网关配置的基本组成模式。一个Route模块由一个Id,一个目标URI,一组断言、一组过滤器定义,如果断言为真,则路由匹配,目标url会被访问。
请求的目标地址,是单个uri资源路径
lb开头的url
目前springcloud gateway 支持多种方式,常见如:Path、Query、Method、Header等,写法必须遵守key=value形式
规则 | 实例 | 说明 |
Path | ||
Before | 在某个时间之前的请求会转发到url | |
After | 某个时间之后的请求转发到url | |
Host | -Host = xx.baidu.com | |
Cookie | - Cookie = sessionId,test | |
Header | - Header =X-Request-Id,\d+ | |
Query | - Query = 参数名或者 -Query = 参数名,参数值 | |
Method | -Method =put |
curl 待cookie 请求:curl http://localhost:9000 --cookie "sessionId=test"
过滤规则 | 实例 | 说明 |
PrefixPath | -PrefixPath=/app | 在请求路径上加/app |
RewritePath | -RewritePath=/test,/app/test | 访问localhost:9000/test,请求会转到localhost9000/app/test |
default-filters | 对所有的请求都添加过滤器 |
网关跨域配置:
spring:
cloud:
gateway:
globalcors:
cors-configuration:
'[/**]':
allowed-origin-patterns: "*"
allowed-headers: "*"
allowed-credentials: true
allowed-methods:
- GET
- POST
- DELETE
- PUT
- OPTION
将整个事务流程分为两个阶段:准备阶段、提交阶段;整个过程由事务管理器和参与者组成;事务管理者负责决策整个分布式事务的提交和回滚,事务参与者负责自己本地事务的提交和回滚;
oracle、mysql支持两阶段提交协议:
1.准备阶段:事务管理者给每个参与者发送Prepare消息,每个数据库参与者在本地执行事务,并写本地的undo/rodo日志,此时事务没有提交;
undo是记录修改前的数据,redo是记录修改后的数据
2.提交阶段:如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚消息;否则,发送提交消息;参与者根据管理器发送的指令执行提交或回滚操作,并释放事务处理过程中使用的锁资源。