Nacos

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
	}
}
posted @ 2023-06-14 09:31  谭五月  阅读(89)  评论(0)    收藏  举报