Nacos 服务注册&配置中心
简介
单机版修改:
Naming、configuration、service
服务注册&配置中心
Nacos = Eureka+config+Bus
安装
https://github.com/alibaba/nacos/releases
启动失败:
把set MODE = "cluster" 修改为以下内容(默认集群启动,修改为单机启动)
rem set MODE="cluster"
set MODE="standalone"
或者启动命令:
./startup.sh -m standalone
1. 服务注册中心
1.1 作为 服务提供者 配置示例
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos 地址
management:
endpoints:
web:
exposure:
include: '*'
主启动类注解: @EnableDiscoveryClient
1.2 作为 服务消费者 配置示例
<!--nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos 地址
主启动类注解: @EnableDiscoveryClient
@Configuration
public class ApplicationConfig {
/**
* @LoadBalanced 使用ribbon + RestTemplate 需加上
*/
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
Nacos和CAP
支持CP和AP切换

2. 服务配置中心
2.1 基础配置
配置文件名称规则:
${spring.application.name}-${spring.profile.cative}.${spring.cloud.nacos.config.file-extension}
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--新版本的需要加上bootstrap依赖才能识别bootstrap.yml-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
bootstrap.yml
远程配置文件信息必须配置在bootstrap中,因为bootstrap优先级更高,在application中将读取不到
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
# 远程配置文件必须配置在bootstrap中,在application中将读取不到
config:
server-addr: 127.0.0.1:8848
file-extension: yaml
# 分组
group: MY_GROUP
# 命名空间
namespace: 4856b1a1-3eec-4bb2-ac6c-920dcf5995ef
application.yml
spring:
profiles:
# nacos 中表示的是 dataID
active: dev
@RefreshScope 业务类添加注解表示动态刷新
2.2 分类管理
上面的 分组 : (group);dataID:(active: dev)
2.3 命名空间
上面的 命名空间:(namespace)

3. 集群持久化配置
3.1 集群
3.1.1 docker 搭建nacos集群
1. 拉去镜像
git clone https://github.com/nacos-group/nacos-docker.git
2. 修改mysql配置脚本
vim $PWD/nacos-docker/env/mysql.env
----------------------------------------------------
MYSQL_ROOT_PASSWORD=root # 数据库登录密码
MYSQL_DATABASE=nacos_config # 数据库名称
MYSQL_USER=nacos # nacos登录用户名
MYSQL_PASSWORD=nacos # nacos登录用户密码
----------------------------------------------------
3. 修改nacos服务配置脚本
vim $PWD/nacos-docker/env/nacos-ip.env
----------------------------------------------------
NACOS_SERVERS=172.16.238.10:8848 172.16.238.11:8848 172.16.238.12:8848
MYSQL_SERVICE_HOST=mysql # mysql 主节点
MYSQL_SERVICE_DB_NAME=nacos_config # 同上
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=nacos
----------------------------------------------------
4. 修改docker-compose 脚本
vim $PWD/nacos-docker/example/cluster-ip.yaml
--------------------------------------------------------
version: "2"
services:
nacos1:
# 修改版本号 https://hub.docker.com/search 查询
image: nacos/nacos-server:latest
container_name: nacos1
networks:
nacos_net:
ipv4_address: 172.16.238.10
volumes:
- ./cluster-logs/nacos1:/home/nacos/logs
ports:
- "8848:8848"
- "9848:9848"
- "9555:9555"
env_file:
- ../env/nacos-ip.env
restart: on-failure
depends_on:
- mysql
mysql:
container_name: mysql
# 修改版本号 https://hub.docker.com/search 查询
image: nacos/nacos-mysql:8.0.16
networks:
nacos_net:
ipv4_address: 172.16.238.13
env_file:
- ../env/mysql.env
volumes:
- ./mysql:/var/lib/mysql
ports:
- "3306:3306"
networks:
nacos_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
--------------------------------------------------------
5. docker-compose -f example/cluster-ip.yaml up

Sentinel 熔断&限流
下载: https://github.com/alibaba/Sentinel/releases
文档: https://sentinelguard.io/zh-cn/docs/introduction.html
<!--sentinel 持久化-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<!--sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
1. 流控规则

QPS : 每秒请求数
2. 熔断规则

3. 热点规则

@SentinelResource(value = "唯一资源名(下图)", blockHandler = "触发限流处理方法名")

系统规则
最外层系统级规则


@SentinelResource 哨兵
官方文档: https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D
参数说明: https://sentinelguard.io/zh-cn/docs/annotation-support.html

案例: blockHandlerClass 全局自定义处理类

fallback 管理运行时异常
blockHandler 管理配置违规
同时存在时,blockHandler 响应优先级更高
持久化规则
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
yml:

配置内容:
resource 资源名称
limit 来源应用
grade 阈值类型 0: 线程数 1: QPS
count 单机阈值
strategy 流控模式 0 表示直接, 1 表示关联,2 表示链路
contorlBehavior 流控效果 0 快速失败, 1 Warm Up, 2 排队等待
clusterMode 是否集群
Seata 分布式事务
分布式事务处理ID + 三组件模型:
XID 全局事务唯一ID
1. TC Transaction Coordinator - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚
2. TM Transaction Manager - 事务管理者
定义全局事务的范围,开始全局事务,提交或回滚全局事务
3. RM ResourceManager - 资源管理器
管理分支事务处理的资源, 于CT交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交和回滚

网友评论