Nacos
1.nacos和eureka的共同点
- 都支持服务注册和服务拉取pull
- 都支持服务中心提供者心跳方式做健康检查
2.Nacos与Eureka的区别
- Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
- Nacos支持服务列表变更的消息推送模式push,服务列表更新更及时
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka才艺AP方式
环境隔离
Nacos环境隔离
- namespace用来做环境隔离
- 每个namespace都有唯一ID
- 不同namespace下的服务不可见
Nacos负载均衡策略
NacosRule负载均衡策略
- 优先选择同集群服务实例列表
- 本地鸡群找不到提供者,采取其他集群寻找,并且会报警告
- 确定了可用实例列表后,再采用随机负载均衡挑选实例
Nacos配置管理
统一配置管理
配置内容填写:
- 核心配置
- 开关配置,如true/false
- 将来会有变化的配置
与nacos地址和配置文件的所有信息都放在bootstrap文件中
- 引入Nacos的配置管理客户依赖
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 在service中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml:
spring:
application:
name: userservice #服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:2010 #Nacos地址
config:
file-extension: yaml #文件后缀名
- 在service中将pattern.dateformat属性注入到Controller中做测试
@RestController
@RequestMapping("/*")
public class Controller {
//注入nacos中的配置属性
@Value("${pattern.dateformat}")
privatet String dateformat;
//编写Controller,通过日期格式化器来格式化现在的时间并返回
@GetMapping("now")
public String now(){
return LocalDate.now().format(
DateTimeFoematter.ofPattern(dateformat, Local.CHINA)
);
}
// ...略
}
总结:将配置交给nacos管理的步骤
- 在Nacos中添加配置文件
- 在微服务中引入nacos的config依赖
- 在微服务中添加bootstrap.yml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件
Nacos配置热更新
Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过线面两种配置实现:
- 方式一:在@Value注入的变量所在类上添加注解@RefreshScope
@Slf4j
@RequestMapping("/user")
@RestController
@RefreshScope
public class UserController {
@Value("${pattern.dateformat}")
private String dateformat;
......
}
- 方式二:使用@ConfigurationProperties注解
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
private String dateformat;
......
}
注意事项
不是所以的配置都适合放到配置中心,维护起来比较麻烦。
建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置。
多环境配置共享
微服务在启动时会从nacos读取多个配置文件:
- [spring.application.name]-[spring.profiles.active].yaml,例如userservice-dev.yaml
- [spring.application,name].yaml,例如:userserrvice.yaml
无论profile如何变化,[spring.appliaction.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件
多种配置的优先级:
Nacos集群搭建
Nacos生产环境下一定要是集群部署
集群结构图:
集群搭建步骤:
-
搭建MySQL集群并初始化数据库表
-
下载解压nacos
-
修改集群配置(节点分支),数据库配置
进入nacos的conf目录,修改配置文件cluster.conf.example,重命名未cluster.conf;
修改内容为
127.0.0.1:8845 127.0.0.1.8846 127.0.0.1.8847
修改application.properties
spring.datasource.platform=mysql db.num=1 db.url=jdbc:mysql//127.0.0.1:3306/nacos_config?charactorEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0=root db.password.0=123456
-
分别启动多个nacos节点
将nacos文件夹复制三份,分别命名为:nacos1,nacos2 ,nacos3
然后分别修改三个文件夹中的application.properties ,
nacos1:
server.port=8845
nacos2:
server.port=8846
nacos3:
server.port=8847
-
nginx反向代理