Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。
1、下载安装包
2、解压
3、修改端口
4、在bin目录下运行指令:startup.cmd -m standalone
1、添加spring-cloud-alilbaba的管理依赖
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.2.6.RELEASE
pom
import
2、添加nacos的客户端依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
3、application.yml文件,添加nacos地址
spring:
cloud:
nacos:
server-addr: localhost:8848 # nacos 服务端地址
服务调用尽可能选择本地集群的服务,跨集群调用延迟较高;本地集群不可访问时,再去访问其它集群。
配置服务集群属性
spring:
cloud:
nacos:
server-addr: localhost:8848 # nacos 服务端地址
discovery:
cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
NacosRule负载均衡策略:
- 优先选择同集群服务实例列表
- 本地集群找不到提供者,才去其它集群寻找,并且会报警告
- 确定了可用实例列表后,再采用随机负载均衡挑选实例
实际部署中会出现这样的场景:
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。
Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。
实例的权重控制:
- Nacos控制台可以设置实例的权重值,0~1之间;
- 同集群内的多个实例,权重越高被访问的频率越高;
- 权重设置为0则完全不会被访问。
在Nacos控制台可以设置实例的权重值,首先选中实例后面的编辑按钮:
Nacos环境隔离:
- 每个namespace都有唯一id
- 服务设置namespace时要写id而不是名称
- 不同namespace下的服务互相不可见
1、在Nacos控制台可以创建namespace,用来隔离不同环境
3、修改应用的application.yml,添加namespace
spring:
datasource:
url: jdbc:mysql://localhost:3306/heima?useSSL=false
username: root
password: 123
driver-class-name: com.mysql.jdbc.Driver
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: SH # 上海
namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
设置非临时实例
spring:
cloud:
nacos:
discovery:
ephemeral: false # 设置为非临时实例
Nacos与eureka的共同点:
Nacos与Eureka的区别:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
在应用中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml。配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件。
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
Nacos中的配置文件变更后,微服务无需重启就可以感知。
注意事项:
- 不是所有的配置都适合放到配置中心,维护起来比较麻烦
- 建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置
@Slf4j
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
@Vaule("${pattern.dataformat}")
private String dataformat;
// ...
}
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
}
微服务默认读取的配置文件:
① [服务名]-[spring.profile.active].yaml,默认配置
② [服务名].yaml,多环境共享
不同微服务共享的配置文件:
① 通过shared-configs指定
② 通过extension-configs指定
优先级: 环境配置 >服务名.yaml > extension-config > extension-configs > shared-configs > 本地配置
微服务启动时会从nacos读取多个配置文件:
多种配置的优先级:
spring:
application:
name: userservice # 服务名称
profiles:
active: dev # 环境
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
shared-configs: # 多微服务间共享的配置列表
- dataId: common.yaml # 要共享的配置文件id
spring:
application:
name: userservice # 服务名称
profiles:
active: dev # 环境
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
extends-configs: # 多微服务间共享的配置列表
- dataId: common.yaml # 要共享的配置文件id
- 搭建MySQL集群并初始化数据库表
- 下载解压nacos
- 修改集群配置(节点信息)、数据库配置
- 分别启动多个nacos节点
- nginx反向代理