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