Nacos  简单使用笔记Nacos 是 Alibaba 开发的, 具有服务管理, 注册与发现, 配置发布与获取功能的框架 集成了注册中心, 配置中心, 服务管理功能 Nacos 关键特性有:
服务发现和服务健康监控 
动态配置服务 
动态 DNS 
服务及其元数据管理 Nacos 支持了 CP + AP 协议 
 
前置知识 注册中心 注册中心简介 
配置中心 配置中心是为解决不同服务运行环境需要不同的一个微服务单元 常用的配置中心有
Spring cloud config 
Apollo 
Nacos 
 
服务管理 动态管理实例
Nacos 启动 单机模式 
下载 Nacos  
在 bin 目录下执行 startup 脚本:  startup.cmd -m standalone 或 startup.sh -m standalone, 其中 standalone 为单机模式启动 
使用 shutdown.sh 或 shutdown.cmd 脚本关闭服务 
 
使用 MySQL 替换 Derby 
在 MySQL 中创建库, 并导入 所需表 
修改 /conf 下的 application.properties   配置文件1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 spring.datasource.platform =mysql # 使用 MySQl 数据源 db.num =1 # 数据库实例数量 db.url.0 =jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC db.user.0 =nacos db.password.0 =nacos db.pool.config.connectionTimeout =30000 db.pool.config.validationTimeout =10000 db.pool.config.maximumPoolSize =20 db.pool.config.minimumIdle =2 
 
 
集群模式 配置 修改 /conf 下的 cluster.conf   配置文件, 添加 Nacos 实例地址
启动 命令 sh startup.sh -p embedded 或 ./startup.cmd -p embedded 使用内置数据源启动 Nacos 命令 sh startup.sh 或 ./startup.cmd  使用外置数据源启动 Nacos
Nacos Client 使用版本Spring boot 2.6.11   + Spring cloud alibaba 2021.0.4.0  
 
配置 需要进行服务发现的实例需要在 Spring boot 启动类添加 @EnableDiscoveryClient 注解
 
依赖项  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <dependencies >     <dependency >          <groupId > com.alibaba.cloud</groupId >          <artifactId > spring-cloud-starter-alibaba-nacos-config</artifactId >      </dependency >      <dependency >          <groupId > com.alibaba.cloud</groupId >          <artifactId > spring-cloud-starter-alibaba-nacos-discovery</artifactId >      </dependency >      <dependency >          <groupId > org.springframework.cloud</groupId >          <artifactId > spring-cloud-starter-loadbalancer</artifactId >      </dependency >  </dependencies > 
 
application.yml  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 spring:     application:          name:  consumer      cloud:          nacos:              server-addr:  127.0 .0 .1 :9000               password:  DEV               username:  DEV               discovery:                  server-addr:  ${spring.cloud.nacos.server-addr}                   username:  ${spring.cloud.nacos.username}                   password:  ${spring.cloud.nacos.password}                   namespace:  DEV                   group:  Patrick                   register-enabled:  false                   cluster-name:  Local                   metadata:                       operator:  Patrick                                   ip:  127.0 .0 .1                   enabled:  true                   access-key:                   endpoint:                   ephemeral:  true                   fail-fast:  true                   failure-tolerance-enabled:  false                   heart-beat-interval:  10000                   heart-beat-timeout:  10000                   instance-enabled:  true                   ip-delete-timeout:  10000                   ip-type:  IPv4                   log-name:  naming.log                   nacos-properties:                      key:  value                  naming-load-cache-at-start:  false                   network-interface:  127.0 .0 .1                   port:  -1                   secret-key:                   secure:  false                   service:  ${spring.application.name}                   watch-delay:  30000                   watch:                      enabled:  true                   weight:  1               config:                  file-extension:  yml                                   prefix:  ${spring.application.name}                   import-check:                      enabled:  true                   access-key:                   cluster-name:  Local                   config-retry-time:  5s                   config-long-poll-timeout:  5s                   context-path:  /nacos                   enable-remote-sync-config:  false                   enabled:  true                   encode:  UTF-8                   endpoint:                   extension-configs:                       -  classpath:/ext.yml                  group:  DEV                   max-retry:  10                   name:  provider-dev.yml                   namespace:  DEV                   environment:                  password:  ${spring.cloud.nacos.password                   preference:  local                   ram-role-name:                   refresh-behavior:  all_beans                   refresh-enabled:  true                   secret-key:                   server-addr:  ${spring.cloud.nacos.server-addr}                   shared-configs:                       -  optional:nacos:mysql-config.yml                  timeout:  5000                   username:  ${spring.cloud.nacos.username}           loadbalancer:              nacos:                               enabled:  false       profiles:          active:  dev       config:          import:               -  optional:nacos:${spring.cloud.nacos.config.prefix}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}               management:     endpoint:          nacosdiscovery:              cache:                  time-to-live:  0ms               enabled:  true           nacosconfig:              cache:                  time-to-live:  0ms               enabled:  true   
 
远程调用 远程调用介绍 
注解 
注解名称 
作用 
 
 
@RefreshScope 
热刷新被 @Value 类变量 
 
负载均衡 LoadBalancer LoadBalancer 实现了轮询和随机两种负载均衡策略, Nacos 中实现了 LoadBalancer 的负载均衡策略
负载均衡策略 
RandomLoadBalancer   查看类全名
   org.springframework.cloud.loadbalancer.core.RandomLoadBalancer  
  随机策略 
RoundRobinLoadBalancer   查看类全名
   org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer  
  轮询策略, 这是LoadBalancer 默认的策略 
NacosLoadBalancer   查看类全名
   com.alibaba.cloud.nacos.loadbalancer.NacosLoadBalancer  
  Nacos 负载均衡策略, 优先选取同集群实例群, 之后进行权重随机选取 
自定义策略   实现 org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer 接口可以自定义负载均衡策略 
 
Nacos 负载均衡策略 将配置文件中的 spring.cloud.loadbalancer.nacos.enabled 属性设置为 true 即可, 或者使用配置类进行注入
配置 全局配置 Config.java  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import  org.springframework.cloud.client.ServiceInstance;import  org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;import  org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;import  org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;import  org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;import  org.springframework.context.annotation.Bean;import  org.springframework.context.annotation.Configuration;import  org.springframework.core.env.Environment;@Configuration public  class  Config  {    @Bean      ReactorLoadBalancer<ServiceInstance> randomLoadBalancer (Environment environment,                                                              LoadBalancerClientFactory loadBalancerClientFactory)  {        String  name  =  environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);         return  new  RandomLoadBalancer (loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);     } } 
 
自定义策略需要在 Spring boot 启动类添加 @LoadBalancerClients(defaultConfiguration = Config.class) 注解, 其中 Config 类为包含 ReactorLoadBalancer Bean 的配置类 
 
局部配置 使用 @LoadBalancerClients 配合 @ LoadBalancerClient 注解可实现细粒度的负载均衡配置
LoadBalancerConfig.java  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 import  org.springframework.cloud.client.ServiceInstance;import  org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;import  org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;import  org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;import  org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;import  org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer;import  org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;import  org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;import  org.springframework.context.annotation.Bean;import  org.springframework.context.annotation.Configuration;import  org.springframework.core.env.Environment;@Configuration @LoadBalancerClients(         @LoadBalancerClient(name = "provider", configuration = LoadBalancerConfig.class) )  public  class  LoadBalancerConfig  {    @Bean      ReactorLoadBalancer<ServiceInstance> randomLoadBalancer (Environment environment,                                                              LoadBalancerClientFactory loadBalancerClientFactory)  {        String  name  =  environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);         return  new  RoundRobinLoadBalancer (loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);     } }