Nacos是阿里巴巴的产品,当初是SpringCloud中的一个组件。Nacos自身就是一个独自的软件,须要下载并且装置
1 注册核心
一、根本应用
在父工程中引入spring-cloud-alilbaba的治理依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.6.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
在微服务中引入nacos客户端依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
在微服务的application.yml文件中增加nacos的配置文件
spring: application: name: xx-xxx-service # 利用名称 cloud: nacos: server-addr: 127.0.0.1:8848 #这里填写注册服务地址
启动naocs 登录后查看是否有对应的服务注册列表
一点要在服务类中写个测试接口,只有spring启动类的空我的项目注册列表不显示!!!
二、Nacos服务分级存储模型
Nacos服务分级为 一级 服务名 二级 服务实例集群 三级 服务实例
设置服务实例对应的集群 配置文件中增加discovery相干的配置
spring: application: name: xx-xxx-service # 利用名称 cloud: nacos: server-addr: 127.0.0.1:8848 #这里填写注册服务地址 discovery: cluster-name: HZ # 配置集群名称,也就是机房地位,例如:HZ,杭州
三、Nacos与Ribbon
Nacos中配置ribbon相干配置为
userservice: #服务提供者服务名 ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载平衡规定
该负载平衡规定默认当初同一集群中寻找服务提供者实例,没有再在不同的集群中寻找服务列表,再随机抉择某个服务实例
这样的益处:同一集群个别都在同一地点,响应工夫更快
也可手动再Nacos中给每个服务实例配置权重来使某个实例应用几率更高或更低,权重值在0~1之间,越高选中概率越高,0则齐全不会被选中
三、Nacos的环境隔离
Nacos中服务存储和数据存储的最外层都是一个名为namespace的货色,用来做最外层隔离
Nacos中可用通过不同的命名空间把微服务分成不同的组,组与组之间无奈互相调用
Nacos新增命名空间流程:
批改配置文件
spring: cloud: nacos: server-addr: localhost:8848 discovery: cluster-name: SH # 上海 namespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
四、长期实例与非长期实例
区别:长期实例宕机时,会从nacos的服务列表中剔除,而非长期实例则不会
长期实例Naocs采纳心跳检测是否挂了,非长期实例Nacos被动询问监测是否挂了
配置非长期实例形式:批改配置文件为:
spring: cloud: nacos: discovery: ephemeral: false # 设置为非长期实例
五、与EUREKA比拟
Nacos与eureka的共同点:
都反对服务注册和服务拉取,消费者垃取服务提供者列表缓存,每30秒拉取更新一次
都反对服务提供者心跳形式做衰弱检测
Nacos与Eureka的区别:
Nacos反对服务端被动检测提供者状态:长期实例采纳心跳模式,非长期实例采纳被动检测模式
长期实例心跳不失常会被剔除,非长期实例则不会被剔除
Nacos反对服务列表变更的音讯推送模式,服务提供者变更后会再被动推送音讯给消费者,服务消费者的服务列表更新更及时
Nacos集群默认采纳AP形式,当集群中存在非长期实例时,采纳CP模式;Eureka采纳AP形式
2 配置核心
nacos能够作为配置核心应用,达到多实例的配置同步,优先级是:
一 nacos配置核心根底应用
naocs操作:
Data ID规定 服务名-环境.文件后缀
我的项目操作:
服务模块减少依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
减少一个bootstrap.yml配置文件,外面次要nacos相干配置,他优先级高于application.yml,使咱们我的项目启动时取拉取nacos中的配置文件
bootstrap.yml中配置:
spring: application: name: userservice # 服务名称 profiles: active: dev #开发环境,这里是dev cloud: nacos: server-addr: localhost:8848 # Nacos地址 config: file-extension: yaml # 文件后缀名
这个配置文件就有优先在nacos中寻找userservice-dev.yaml的配置文件
application.yml中配置
server: port: 9999 #端口
测试代码:
@Component@ConfigurationProperties(prefix = "pattern")public class PatternConfig { private String dateformat; public String getDateformat() { return dateformat; } public void setDateformat(String dateformat) { this.dateformat = dateformat; }}@RestController@RequestMapping("/hello")public class hello { @Autowired private PatternConfig patternConfig; @GetMapping("/test") private String test(){ return patternConfig.getDateformat(); }}
nacos中的测试配置:
应用@ConfigurationProperties注入的配置文件是能够热更新的
二 nacos配置核心配置文件多环境共享、多服务共享
多环境共享:
服务名-环境.文件后缀(如:userservice-dev.yml) 只能对应环境应用 服务名.文件后缀 全环境都可应用(如:userservice.yml),优先级 [服务名]-[环境].yaml >[服务名].yaml > 本地配置,所以,只须要把要共享的配置放在服务名.yaml中就能够多环境共享
多服务共享:
形式一:
spring: application: name: userservice # 服务名称 profiles: active: dev # 环境, cloud: nacos: server-addr: localhost:8848 # Nacos地址 config: file-extension: yaml # 文件后缀名 shared-configs: # 多微服务间共享的配置列表 - dataId: common.yaml # 要共享的配置文件id
手动配置 dataId: xxx.yaml
形式二:
spring: application: name: userservice # 服务名称 profiles: active: dev # 环境, cloud: nacos: server-addr: localhost:8848 # Nacos地址 config: file-extension: yaml # 文件后缀名 extends-configs: # 多微服务间共享的配置列表 - dataId: extend.yaml # 要共享的配置文件id
手动配置 dataId: xxx.yaml