nacos 注册中心docker搭建
1.Clone 项目
使用docker 启动
git clone https://github.com/nacos-group/nacos-docker.git
启动方式支持多种
- 单机模式 Derby
docker-compose -f example/standalone-derby.yaml up -d
-
MySQL5.7
docker-compose -f example/standalone-mysql-5.7.yaml up -d
-
MySQL8
docker-compose -f example/standalone-mysql-8.yaml up -d
这里使用mysql 8 来启动
查看启动日志
docker-compose -f standalone-mysql-8.yaml logs -f
启动时docker service里会同时起mysql服务,nacos需要连接数据库 ,但是可能连接失败,需要down掉 再次up启动
docker-compose -f example/standalone-mysql-8.yaml down
启动成功后,浏览器换成自己的ip访问:
http://192.168.6.162:8848/nacos
账户 nacos 密码 nacos
spring-cloud-alibaba项目代码
nacos 服务注册与发现
基于官方文档Spring Cloud Alibaba Reference Documentation
1. 创建spring-cloud-alibaba
项目地址:GitHub - liangzhe9/spring-cloud-alibaba at master
2. 创建spring-cloud-alibaba-dependencies 模块
此模块只负责依赖包的引入和版本控制
建议参照 spring.io 官网,上面有spring Cloud 与springboot 对应的版本,选择合适的版本
这里选择springboot version:2.7.2
springCloud version:2021.0.3
springCloud alibaba version:2021.1
3.创建spring-cloud-alibaba-provider模块
resource目录下创建application.yml
spring:
application:
# 服务名
name: service-provider
cloud:
nacos:
discovery:
# 服务注册中心
server-addr: 192.168.6.162:8848
server:
port: 8070
# 端点健康检查
management:
endpoints:
web:
exposure:
include: "*"
4. 创建spring-cloud-alibaba-consumer模块
resource目录下创建application.yml
spring:
application:
# 服务名
name: service-consumer
cloud:
nacos:
discovery:
# 服务注册中心
server-addr: 192.168.6.162:8848
server:
port: 8071
# 端点健康检查
management:
endpoints:
web:
exposure:
include: "*"
Nacos feign 客户端
简介:
Feign 是一个声明式的伪http客户端,只需要创建一个接口并注解,具有可插拔的特性,
Feign默认集成了Ribbon,Nacos也很好的兼容了Feign,默认实现了负载均衡
pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
Nacos Ribbon 默认采用轮询的负载均衡机制
常见负载均衡方式:
- 轮询
- 加权轮询
- 最少连接数
- 源IP 哈希
Nacos 配置中心
1.nacos 支持动态配置中心
nacos 版本2.1 使用mysql 8 启动,可能会添加配置失败,通过前端页面报错原因可以找到是nacos默认创建的mysql 缺少了字段:encrypted_data_key
在config_info 表和 his_config_info 表加入encrypted_data_key 字段即可
2.创建service-consumer-config.yaml
选项必须是yaml 后缀,否则会加载为properties,而且配置中不能出现注释代码
配置文件加载优先级:
bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml
spring:
application:
name: service-consumer
cloud:
nacos:
discovery:
server-addr: 192.168.6.129:8848
server:
port: 8080
management:
endpoints:
web:
exposure:
include: "*"
user
name: "test"
3. 引入pom 和 properties
pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
##nacos 对properties 重写了,需要新增依赖才能引入配置文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
bootstrap.properties
spring.cloud.nacos.config.server-addr=192.168.6.162:8848
spring.application.name=service-consumer-config
spring.cloud.nacos.config.file-extension=yaml
spring.main.allow-circular-references=true
4.Nacos多环境配置
1. 普通启动通过profile 启动
java -jar 1.0.0-snapshot.jar --spring.profiles.acitve=prod
2. 创建service-provider-config.yaml 在nacos配置中心
spring:
application:
# 服务名
name: service-consumer
cloud:
nacos:
discovery:
#服务注册中心
server-addr: 192.168.6.129:8848
config:
server-addr: 192.168.6.129:8848
server:
port: 8070
management:
endpoints:
web:
exposure:
include: "*"
3. 再创建service-provider-config-prod.yaml
端口号改为8071 用来区分
spring:
application:
# 服务名
name: service-consumer
cloud:
nacos:
discovery:
#服务注册中心
server-addr: 192.168.6.129:8848
config:
server-addr: 192.168.6.129:8848
server:
port: 8071
management:
endpoints:
web:
exposure:
include: "*"
在spring boot application 配置中有active profies = prod !!!
报错的话,直接在IDE 启动的active 里面=prod spring.profiles.active=prod
回去找nacos上的配置中心 prod的配置文件yaml
发布时可能会存在配置文件报错,删掉配置中所有的注释启动 跳到target 目录下,通过java -jar *.jar --spring.profies.active=prod 启动尝试
Nacos Sentinel 分布式流量防卫兵
1. 概述:
当其中一台服务出现故障,会访问涌入其他的服务, 造成雪崩效应,所以业界出现了 熔断器模型
Sentinel概述
Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。
Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
Sentinel核心分为两个部分:
- 核心库(Java 客户端):能够运行于所有 Java 运行时环境,同时对Dubbo /Spring Cloud 等框架也有较好的支持。
- 控制台(Dashboard):基于 Spring Boot 开发,打包后可以直接运行。
2. Sentinel 控制台
github 下载sentinel jar包
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.4.jar
账号:sentinel
密码:sentinel
3. yaml 引入sentinel
spring:
application:
name: service-consumer
cloud:
nacos:
discovery:
server-addr: 192.168.6.162:8848
sentinel:
transport:
enable: true
port: 8720
dashboard: localhost:8080
server:
port: 8076
feign:
sentinel:
enabled: true
management:
endpoints:
web:
exposure:
include: "*"
user:
name: "hahahaha"
4. 注意
sentinel 1.8.4 会默认创建本地dashboard 占用8719端口,所以yaml中使用8720 端口