Nacos
startup.cmd -m standalone
注意:
1、Nacos2.0
的服务端完全兼容1.X
客户端
2、Nacos2.0
客户端由于使用了gRPC,无法兼容Nacos1.X
服务端,请勿使用 2.0 以上版本客户端连接Nacos1.X 服务端。
3、默认用到的 nacos 的客户端jar包为 2.0 的,无法兼容 Nacos1.X 服务端。需要在本地安装运行 Nacos2.X 的服务端或者将 SpringCloudAlibaba 版本换成 2.2.6.RELEASE
(此版本默认用到的客户端jar包为1.X的)
Nacos 服务分级存储模型
一级:服务,例如 document-service
二级:集群,例如 杭州,上海,深圳,服务相互调用时优先选择同一集群内的实例
三级:实例
根据集群负载均衡
# 将实例加入HZ集群
spring.cloud.nacos.discovery.cluster-name=HZ
# 配置ribbon负载均衡规则
# 假设当前在documentservice的application.yml中,则此配置表明,documentservice对userservice服务的调用将优先考虑与documentservice同一集群的userservice的实例,对同一集群内的多个实例随机选择
userservice.ribbon.NFLoadBalancerRuleClassName=com.alibaba.cloud.nacos.ribbon.NacosRule
Nacos权重配置
0-1之间
环境隔离 NamsSpace
不同命名空间下的实例无法相互访问
# 1、在 Nacos 控制台添加命名空间
# 2、添加 application.yml 配置
spring.cloud.nacos.discovery.namespace=<第1步生成的命名空间ID>
临时实例与非临时实例
1、临时实例:实例主动向注册中心发送心跳,表明该实例仍然存活,nacos会剔除不活跃的临时实例
2、非临时实例:nacos主动发送请求询问实例是否存活,nacos不会从实例列表中剔除不存活的非临时实例
nacos一旦发现实例死亡,会立即报告服务消费者,消费者则从其服务列表缓存中剔除该服务提供者的信息,从而不会向该实例发出请求
# 配置当前实例为非临时实例
spring.cloud.nacos.discovery.ephemeral=false
Nacos与eureka的区别
1、Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式(主动检测模式会增大服务器压力)
2、临时实例心跳不正常会被剔除,非临时实例则不会被剔除
3、Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
4、Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka测i用AP方式
Nacos配置管理
1、在Nacos中添加配置文件:
DataId: <documentservice>-[dev|test|prod].[yaml|properties]
Group: 默认
2、在微服务中引入Nacos的config依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
3、在微服务中添加bootstrap.yml,配置nacos地址,当前环境,服务名称,文件后缀名,这些决定了程序启动时Nacos去读取哪个配置文件
在微服务的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml
# 这三项配置的组合即为Nacos控制台中配置的DataId:documentservice-dev.yaml
spring.application.name=documentservice
spring.profiles.active=dev
spring.cloud.nacos.config.file-extension=yaml
# Nacos服务器的地址
spring.cloud.nacos.server-addr=localhost:8848
4、配置热更新
Nacos中的配置文件变更后,微服务无需重启就可以感知,不过需要通过以下两种方式实现,属性的注入方式不同,刷新的方式也不同
1、通过@Value注解注入,结合@RefreshScope来刷新
@Value("${pattern.dateformat}")
private String dateformat;
则应在@Value注入的变量所在类上添加注解@RefreshScope:
@RefreshScope
public class DocumentController{
@Value("${pattern.dateformat}")
private String dateformat;
}
2、通过@ConfigurationProperties注入,自动刷新
@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties{
private String dateformat;
}
@RestController
public class DocumentController{
@Autowired
private PatternProperties properties;
@GetMapping("show")
public void show(){
System.out.Println(properties.dateformat);
}
}
使用这种方式注入的属性无需其他配置,即可自动刷新
5、多环境配置共享
微服务启动时会从Nacos读取多个配置文件
1、[spring.application.name]-[spring.profile.active].yaml,例如documentservice-dev.yaml
2、[spring.application.name].yaml,例如document.yaml
无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享的配置可以写入这个文件
6、配置的优先级
最高优先级:[spring.application.name]-[spring.profile.active].yaml
第二优先级:[spring.application.name].yaml
最低优先级:微服务本地配置
集群配置
1、进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf
2、向cluster.conf中添加每一个节点的信息
127.0.0.1:8841
127.0.0.1:8842
127.0.0.1:8843
3、修改application.properties文件,添加数据库配置
# 使用mysql来存储Nacos的数据
spring.datasource.platform=mysql
# 数据库的数量
db.num=1
# 每个数据库的连接参数
db.url.0=jdbc:mysql://127.0.0.1:3306/.........
db.user.0=......
db.password.0=......
# 分别配置每个节点的端口号
server.port=8841/8842/8843
4、分别启动每个Nacos
startup.cmd
5、使用Nginx做反向代理与负载均衡
upstream nacos-cluster {
server 127.0.0.1:8841;
server 127.0.0.1:8842;
server 127.0.0.1:8843;
}
server {
listen 80;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster
}
}
标签:服务,application,spring,Nacos,nacos,yaml,实例
From: https://www.cnblogs.com/tanmujin/p/17440824.html