适合个人网站网页设计素材推荐
Nacos介绍
 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的⾸字⺟简称,⼀个更易于构  
 
 建云原⽣应⽤的动态服务发现、配置管理和服务管理平台。  
 
 在这个介绍中,可以看出Nacos⾄少有三个核⼼功能:  
 
 1. 动态服务发现  
 
 2. 配置管理  
 
 3. 服务管理  
 
 后续会分别来介绍这三个功能是怎么回事。  
 
 
下载和解压
 教程制作时,Nacos的最新发⾏版为 2 . 1 . 1  (Aug  8 th,  2022 ) (本教程就是基于这个版本),官⽅ 当前推荐的稳定版本为2 . 0 . 3 。 
 
 查看最新Nacos发⾏版: https://github.com/alibaba/nacos/releases  
  并且可以在此⽹⻚上下载安装包: 
 
 下载完了之后进⾏解压,解压之后的⽬录为:

 1.  bin⽬录下是启动和停⽌的脚本  
 
 2.  conf⽬录下是Nacos的配置⽂件  
 
 3.  target⽬录下是Nacos的jar包(启动脚本中其实就是运⾏的这个jar包,停⽌脚步中是直接kill到进  
 
 程)  
 
 
启动
 解压完之后就可以启动Nacos了,Nacos⽀持单机和集群,默认是以集群模式启动,通过添加 -m  
  standalone就会以单机模式启动。 
  Linux/Unix/Mac
 启动命令(standalone代表着单机模式运⾏,⾮集群模式): 
 sh startup.sh -m standalone
如果您使⽤的是ubuntu系统,或者运⾏脚本报错提示[[符号找不到,可尝试如下运⾏:
bash startup.sh -m standalone
Windows
 启动命令(standalone代表着单机模式运⾏,⾮集群模式):  
 
startup.cmd -m standalone
启动⽇志

 可以发现,默认情况下Nacos占⽤了 8848 端⼝。  
 
 我们可以访问 http://localhost: 8848 /nacos ,来访问Nacos:  
 
 

默认的⽤户名和密码为:nacos/nacos
 登录进来后:  
 
 
 这个⽹⻚相当于nacos的管理台,有:  
 
 1.  配置管理  
 
 2.  服务管理 
 
 3.  权限控制  
  4.  命名空间  
  5.  集群管理 
  配置管理
 配置,其实就是⼀个key:value,⽐如 
  spring . datasource . username = zhouyuspring . datasource . password = 123456
 并且我们通常会把这些配置写在application.properties或application.yml⽂件中,当时通过这种⽅式⼀定配置发⽣了改变就需要重启应⽤,并且通过这种⽅式配置的配置项仅限于当前应⽤,⽽不能做到多个应⽤共享。  
  那么nacos的配置管理功能就是来解决这些问题的,我们可以直接通过nacos管理台来新增配置,并且这些配置能够被多个应⽤给使⽤到。  
  新建配置
 新建配置时可以指定:  
  1.  Data ID:相当于⼀个配置⽂件,⽐如相当于application.properties,或者application 
  dev.properties,不过要注意的是,我们在某个项⽬中使⽤application.properties⽂件中,那个  
  application表示的就是当前应⽤,那我们在nacos进⾏配置时,就要尽可能的取⼀些有含义的Data  
  ID,⽐如user.properties(表示⽤户应⽤的配置),order.properties(表示订单应⽤的配置),  
  common.properties(表示多个应⽤共享的配置)。  
  2.  Group:在nacos中,⼀个Data ID,也就是⼀个或多个配置⽂件可以归类到同⼀个Group中,Group的作⽤就是⽤来区分Data ID相同的情况,不同的应⽤或中间件使⽤了相同的Data ID时就可以通过Group来进⾏区分,默认为DEFAULT_GROUP  
  3.  配置内容:写具体的配置项,可以⽤properties的格式,也可以⽤yaml的格式  
   ⽐如: 
 
 
拉取配置
 在nacos中新建完配置后,那作为⼀个SpringBoot应⽤我们如何来获取配置呢? 
  Java SDK
 ⾸先,我们可以直接使⽤Nacos提供的Java SDK来获取配置。  
  ⾸先在项⽬中,添加如下依赖: 
 <dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.1.1</version>
</dependency> 然后可以使⽤如下代码来获取nacos中的配置:
try {
String serverAddr = "localhost:8848";
String dataId = "user.properties";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
ConfigService configService = NacosFactory.createConfigService(propert
ies);
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
} catch (NacosException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}  1.  serverAddr:nacos的地址  
  2.  dataId:想要获取的配置⽂件的名字  
  3.  group:分组 
   在Java SDK中,除开有获取配置的API,同时也提供了新增、删除、监听配置的API。  
  我们可以通过如下代码来监听配置的变化: 
 try {
String serverAddr = "localhost:8848";
String dataId = "user.properties";
String group = "DEFAULT_GROUP";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
ConfigService configService = NacosFactory.createConfigService(propert
ies);
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
configService.addListener(dataId, group, new Listener() {
public void receiveConfigInfo(String configInfo) {
System.out.println("recieve1:" + configInfo);
}
public Executor getExecutor() {
return null;
}
});
// 测试让主线程不退出,因为订阅配置是守护线程,主线程退出守护线程就会退出。 正式代
//码中⽆需下⾯代码
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} catch (NacosException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}  剩余API,⼤家可以直接参考官⽹: https://nacos.io/zh-cn/docs/sdk.html 
  Spring
 在真正开发时,我们不太会通过Java SDK的⽅式来拉取nacos中的配置,那Nacos有没有针对Spring提供⼀些⽐较好⽤的注解或API呢?  
  当然是有的。  
  增加⼀下依赖(不再需要nacos-client依赖了)  
  <dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-spring-context</artifactId><version>1.1.1</version>
</dependency>  我们可以按以下⽅式来配置Spring容器: 
  @Configuration
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.
0.1:8848"))
@NacosPropertySource(dataId = "user.properties", autoRefreshed = true)
@ComponentScan("com.zhouyu")
public class AppConfig {
}  很明显,通过@EnableNacosConfig注解定义了nacos的地址,通过@NacosPropertySource表示想要拉取的dataId,并且设置⾃动刷新(也就是配置发⽣了改变则会⾃动⽣效)。  
  那如何使⽤某⼀个具体的配置项呢: 
  @Component
public class UserService {@NacosValue("${spring.datasource.username}")private String username;public void test(){System.out.println(username);}
}  可以通过@NacosValue来使⽤某⼀具体的配置项,那@Value⾏不⾏呢?也是可以的。  
  之所以可以,原因是@EnableNacosConfig注解会负责把指定的dataId的配置项拉取到应⽤,并封装为PropertySource对象添加到Environment对象中,所以@Value也能读取到相应的配置项。  
  SpringBoot
 如果我们使⽤SpringBoot,那则可以⽐Spring更加简单。  
  ⾸先引⼊依赖:  
 <dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>0.2.12</version>
</dependency>  然后在application.properties中配置nacos的地址:  
 nacos.config.server-addr=127.0.0.1:8848  然后: 
 @SpringBootApplication
@NacosPropertySource(dataId = "user.properties", autoRefreshed = true)
public class UserApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext = SpringApplicat
ion.run(UserApplication.class, args);UserService userService = applicationContext.getBean(UserService.c
lass);userService.test();}
}  依旧使⽤@NacosPropertySource来指定要拉取的配置dataId即可,就可以使⽤@Value或@NacosValue来获取某个具体的配置项了。  
  那有同学可能会想到,我们可不可以直接在application.properties⽂件中来配置dataid呢?确实可以:  
 nacos.config.server-addr =127.0.0.1:8848nacos.config.data-id =user.propertiesnacos.config.bootstrap.enable =true
不过要注意,⼀定得把nacos.config.bootstrap.enable设置为true,不然是不⾏的。
SpringCloud
 如果我们是⽤SpringCloud,那将⽐SpringBoot更加简单。  
 
 引⼊依赖:  
 
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>  然后在boostrap.properties⽂件中配置:  
 spring.application.name =userspring.cloud.nacos.server-addr =127.0.0.1:8848
 就可以了,因为会⾃动去连接nacos并获取dataid为user.properties的配置了。  
 
 到这⾥,我们⼤概知道了Nacos的配置管理是怎么⽤的了,接下来我们再来介绍⼀些配置管理更⾼级的功能。  
 
 
按profile拉取配置
 在使⽤spring-cloud-starter-alibaba-nacos-config时,我们除开可以配置  
  spring.cloud.nacos.config.server-addr外,还可以配置:  
  1.  spring.cloud.nacos.config.group:默认为"DEFAULT_GROUP"  
  2.  spring.cloud.nacos.config.file-extension:默认为"properties"  
  3.  spring.cloud.nacos.config.prefix:默认为${spring.application.name}  
  所以,默认情况下,会拉取"DEFAULT_GROUP"组下dataid为user.properties的配置,不过通过看源码: 
 
// com.alibaba.cloud.nacos.client.NacosPropertySourceLocator#loadApplicati
onConfiguration
private void loadApplicationConfiguration(
CompositePropertySource compositePropertySource, String dataIdPrefix,
NacosConfigProperties properties, Environment environment) {
String fileExtension = properties.getFileExtension();
String nacosGroup = properties.getGroup();
// 1
// load directly once by default
loadNacosDataIfPresent(compositePropertySource, dataIdPrefix, nacosGro
up,fileExtension, true);
// 2
// load with suffix, which have a higher priority than the default
loadNacosDataIfPresent(compositePropertySource,dataIdPrefix + DOT + fileExtension, nacosGroup,
fileExtension, true);
// 3
// Loaded with profile, which have a higher priority than the suffix
for (String profile : environment.getActiveProfiles()) {
String dataId = dataIdPrefix + SEP1 + profile + DOT + fileExtensio
n;
loadNacosDataIfPresent(compositePropertySource, dataId, nacosGroup
,fileExtension, true);
}
} 
 可以发现,在拉取配置时会分为三步:  
 
 1.  拉取dataid为user的配置  
 
 2.  拉取dataid为user.properties的配置  
 
 3.  拉取dataid为user-${ spring.profiles.active }.properties的配置 
 
 
 并且优先级依次增⾼。  
  还值得注意的是,在拉取配置时,还会加上namespace这个维度取获取配置,可以通过  
  spring.cloud.nacos.config.namespace进⾏配置。  
   我们可以在Nacos管理台:  
  1.  新建不同的namespace  
  2.  在每个namespace下可以进⾏dataid名称相同的配置  
  3.  每个dataid⼜可以分配到不同的group下  
  相当于⼀个三层结构 
 
 
拉取多个配置
 ⼀个应⽤可能不⽌需要⼀个配置,有时可能需要拉取多个配置,此时可以利⽤ 
 1. spring.cloud.nacos.config.extension-configs[ 0 ]. data-id = datasource.properties2. spring.cloud.nacos.config.shared-configs[ 0 ]. data-id = common.properties
 extension-configs表示拉取额外的配置⽂件,shared-configs也表示拉取额外的配置⽂件,只不过:  
  1.  extension-configs表示本应⽤特有的  
  2.  shared-configs表示多个应⽤共享的  
  注意优先级:  
  ●  extension-configs[ 2 ] > extension-configs[ 1 ] > extension-configs[ 0  
  ●  shared-configs[ 2 ] > shared-configs[ 1 ] > shared-configs[ 0 ]  
  ●  主配置 > extension-configs > shared-configs 
  配置的⾃动刷新
 默认情况下,主配置会⾃动刷新,extension-configs和shared-configs不会⾃动刷新 ,可以通过  
  spring.cloud.nacos.config.refresh-enabled=false来关闭主配置的⾃动刷新。  
  ⾃动配置的意思是,⼀旦应⽤中引⼊的配置发⽣了变化,应⽤端也能及时获取到最新值。  
  值得注意的是,尽管默认情况下会⾃动刷新,但是对于通过@Value的使⽤⽅式,还需要在该Bean上加上 @RefreshScope注解,这样才能动态的修改@Value属性,达到动态更新的最终效果。  
  历史版本回滚
 可以回滚某个配置到历史版本 
  监听查询
 监听某个配置哪些应⽤在使⽤ 
   服务管理
 服务管理核⼼就是:  
  1.  服务注册  
  2.  服务发现  
  通过nacos的服务注册与发现,可以使得在调⽤微服务时可以更加简单。 
  Java SDK
服务注册
 ⾸先,我们可以直接使⽤Nacos提供的Java SDK来进⾏服务注册。  
  ⾸先在项⽬中,添加如下依赖: 
 <dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>2.1.1</version>
</dependency>  我们可以使⽤如下代码来快速的进⾏服务注册:  
 NamingService naming = NamingFactory.createNamingService("localhost:8848");
naming.registerInstance("app1", "11.11.11.11", 8888);  以上代码表示注册⼀个服务:  
  1.  服务名字为app 1 
  2.  访问该服务的地址为: 11 . 11 . 11 . 11 : 8888  
   注意执⾏完上述代码后,不要上线程停掉,可以加上:  
 System.in.read();  运⾏为代码后,就可以到Nacos管理台看到: 
 
  可以发现,⼀个服务下:  
 
 1.  ⼀个服务可以属于某⼀个组,可以在注册时指定group  
 
 2.  ⼀个服务下可以有多个实例  
 
 3.  ⼀个服务下多个实例可以分为多个虚拟集群  
 
 ⽐如以下代码就注册了⼀个服务有三个实例,分别属于两个虚拟集群  
 
NamingService naming = NamingFactory.createNamingService("localhost:8848")
;
naming.registerInstance("app1", "11.11.11.11", 8888, "cluster1");
NamingService naming1 = NamingFactory.createNamingService("localhost:8848"
);
naming1.registerInstance("app1", "11.11.11.12", 8888, "cluster1");
NamingService naming2 = NamingFactory.createNamingService("localhost:8848"
);
naming2.registerInstance("app1", "11.11.11.13", 8888, "cluster2");
System.in.read(); 
 对应的管理台展示为: 
 
 
详情如下:

我们也可以使⽤更加定制化的⽅式来注册服务:
NamingService naming = NamingFactory.createNamingService("localhost:8848")
;
Instance instance = new Instance();
instance.setIp("55.55.55.55");
instance.setPort(9999);
instance.setHealthy(false);
instance.setWeight(2.0);
Map<String, String> instanceMeta = new HashMap<String, String>();
instanceMeta.put("site", "et2");
instance.setMetadata(instanceMeta);
naming.registerInstance("app1", instance);
System.in.read(); 
 以上代码注册了⼀个不健康的实例,并且设置了权重和元数据, 对应的管理台效果为: 
 
 
服务发现
服务注册之后,服务消费者就可以来使⽤了,我们可以使⽤如下api来获取某个服务的所有实例信息
NamingService naming = NamingFactory.createNamingService("localhost:8848");
System.out.println(naming.getAllInstances("app1")); 
 也可以获取所有健康的实例  
 
naming.selectInstances("app1", true)  可以直接某⼀个健康的实例(权重随机算法) 
 naming.selectOneHealthyInstance("app1")  通常,作为服务消费者,还需要监听服务实例化的变化,我们可以使⽤如下api来监听变化: 
 NamingService naming = NamingFactory.createNamingService("localhost:8848");
naming.subscribe("app1", event -> {
if (event instanceof NamingEvent) {
System.out.println(((NamingEvent) event).getServiceName());
System.out.println(((NamingEvent) event).getInstances());
}
});  以上是Nacos提供了Java SDK的常⽤API,熟悉这些API能更好的理解或深⼊研究Nacos。  
  Spring/SpringBoot
 直接使⽤Java SDK的⽅式来进⾏服务注册和发现⽐较麻烦,不过⽬前在Spring和SpringBoot中使⽤也不怎么⽅便,可以⾃⾏参考官⽹的教程: https://nacos.io/zh-cn/docs/quick-start-spring-boot.html  
  SpringCloud
 我们直接来看SpringCloud中如何使⽤Nacos来进⾏服务注册和发现  
  ⾸先添加依赖:  
 <dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.8.RELEASE</version>
</dependency> 服务提供者
 在服务提供者的application.properties中配置: 
 server.port=8070
spring.application.name=service-provider
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848  使⽤@EnableDiscoveryClient来开启服务注册 
  @SpringBootApplication
@EnableDiscoveryClient
public class UserApplication {
public static void main(String[] args) throws IOException {
SpringApplication.run(UserApplication.class, args);
}
}  启动应⽤,就能完成服务注册:  
 
 服务消费者
 也是先添加依赖: 
 
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>  再配置应⽤的application.properties⽂件:  
 server.port =8080spring.application.name =service-consumerspring.cloud.nacos.discovery.server-addr =127.0.0.1:8848
然后使⽤@EnableDiscoveryClient开启服务发现:
@SpringBootApplication
@EnableDiscoveryClient
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
} 
 然后通过定义⼀个 RestTemplate来发现http请求,并使⽤@LoadBalanced 
 
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}  然后来使⽤RestTemplate调⽤服务:  
 @RestController
public class ConsumerController {@Autowiredprivate RestTemplate restTemplate;@GetMapping(value = "/test")public String echo() {return restTemplate.getForObject("http://service-provider/test", S
tring.class);}
}  可以发现在SpringCloud中使⽤Nacos还是⽐较⽅便的。  
  ⾼级功能
 接下来我们再来看看Nacos服务管理中⼀些⽐较⾼级的功能 
  临时实例与持久实例
 默认情况下,注册给nacos的实例都是临时实例,临时实例表示会通过客户端与服务端之间的⼼跳来保活,默认情况下,客户端会每隔5 s发送⼀次⼼跳。  
  public static final long DEFAULT_HEART_BEAT_INTERVAL = TimeUnit.SECONDS.toM
illis(5);  在服务端测,如果超过 15 s没有收到客户端的⼼跳,那么就会把实例标记为不健康状态  
 public static final long DEFAULT_HEART_BEAT_TIMEOUT = TimeUnit.SECONDS.toMi
llis(15);  在服务端测,如果超过 30 s没有收到客户端的⼼跳,那么就会删除实例 
 public static final long DEFAULT_IP_DELETE_TIMEOUT = TimeUnit.SECONDS.toMil
lis(30);  ⽽对于持久实例,就算服务实例下线了,那么也不会被删除,我们可以通过:  
  spring.cloud.nacos.discovery.ephemeral=false 1  来配置为持久实例,表示实例信息会持久化到磁盘中去。  
  那什么时候⽤持久实例呢?我们可以发现持久实例与临时实例的区别在于,持久实例会永远在线,⽽临时实例不会,所以如果消费端在某种情况下想拿到已经下线的实例的实例信息,那么就可以把实例注册为持久实例。  
  保护阈值
 在使⽤过程中,我们可以设置⼀个 0 - 1 的⼀个⽐例,表示如果服务的所有实例中,健康实例的⽐重低于这个⽐重就会触发保护,⼀旦触发保护,在服务消费端侧就会把所有实例拉取下来,不管是否健康,这样就起到了保护的作⽤,因为正常来说消费端只会拿到健康实例,但是如果健康实例占总实例⽐例⽐较⼩了,那么就会导致所有流量都会压到健康实例上,这样仅剩的⼏个健康实例也会被压垮,所以只要触发了保护,消费端就会拉取到所有实例,这样部分消费端仍然会访问到不健康的实例从⽽请求失败,但是也有⼀部分请求能访问到健康实例,达到保护的作⽤。  
   在SpringCloud Tencent中,这个功能叫“全死全活”。 
  权重
 ⼀个服务的多个实例,可能对应的机器配置不同,所以我们可以给不同的实例设置不同的权重,⽐如  
 
 
 给 8070 这个实例设置了权重为 2 ,这样它的权重就是 8071 的两倍,那么就应该要承受 2 被的流量。  
 
 不过我们在消费⼀个服务时,通常是通过ribbon来进⾏负载均衡的,所以默认情况下nacos配置的权重是起不到作⽤的,因为ribbon使⽤的是⾃⼰的负载均衡策略,⽽如果想要⽤到nacos的权重,可以:  
 
@Bean
public IRule ribbonRule() {
return new NacosRule();
}  这样就会利⽤到nacos中所配置的权重了。 
  Cluster(就近访问)
 ⼀个服务下会有多个实例,在nacos中,可以将这些实例指定到不同的集群中,⽐如可以通过:  
 spring.cloud.nacos.discovery.cluster-name=bj  这种⽅式来指定当前实例属于哪个集群,⽐如: 
 
 hz集群只有⼀个8070的实例,bj集群有8071、8072两个实例。
 此时在服务消费端,也可以配置:  
 spring.cloud.nacos.discovery.cluster-name=bj  使得服务调⽤者也在bj集群,那么此时服务消费者就只会调⽤到bj集群中的两个实例。  
  如果消费端没有配置cluster-name,那么则会使⽤所有集群。  
  集群部署
 在前⾯,我们都是使⽤的单机模式部署的nacos服务端的,为了保证nacos的⾼可⽤,也就是保证配置中⼼和注册中⼼的⾼可⽤,通常我们都需要以集群的⽅式来部署nacos server。 
   ⾸先,我们修改conf/cluster⽂件,把nacos集群中所有的节点的ip和port配置进去: 
  192.168.65.46:8848
192.168.65.46:8858
192.168.65.46:8868  我这⾥是在我本机搭集群,所以ip地址⼀样,端⼝得不⼀样,如果⼤家是在多个机器上搭机器,则ip地址不⼀样,端⼝可以⼀样,也可以不⼀样,通常是⼀样(8848 )。  
  如果多个机器来搭集群,那么这么配置⼀下就可以了,注意每个机器上得cluster⽂件都要配,表示每个nacos节点都得知道⾃⼰所在集群的节点情况。  
  我这⾥在本地搭,就需要多⼏个步骤。  
  先复制三份  
 
 每个⽂件夹的内容都是如下
 
分别修改三个cluster⽂件的内容都为:
192.168.65.46:8848
192.168.65.46:8858
192.168.65.46:8868 
 再分别修改三个application.properties中的server.port为 8848 、 8858 、 8868  
 
 然后通过cmd分别进去三个⽂件夹中的bin⽬录,运⾏:  
 
 
startup.cmd -p embedded  来启动三个节点  
  启动成功后  
 
 
 然后我们就可以通过: http://localhost: 8848 /nacos 、 http://localhost: 8858 /nacos 、  
  http://localhost: 8868 /nacos 这三个路径来访问nacos管理台,效果是⼀样的。  
   并且可以看到集群的情况: 
 
 不过我们我们在启动的时候,使⽤了
startup.cmd -p embedded  表示使⽤内置数据源,我们可以切换成mysql,⾸先我们在⾃⼰的mysql中新建⼀个schema:  
  nacos_config 
   然后执⾏ 
 
 
 然后执⾏该sql脚本,去创建相关的表,可以发现只有配置中⼼的配置信息才会存到mysql中,注册中⼼的服务信息是不会存的。  
  然后修改application.properties⽂件中的:  
  ### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos2?characterEncoding=utf8&connect
Timeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=
false&serverTimezone=UTC
db.user.0=root
db.password.0=Zhouyu123456***  三个节点都配好,并且必须连接同⼀个数据库,配好之后,就可以直接使⽤startup.cmd来启动了。  
  那nacos集群搭建完之后,对应我们的应⽤⽽⾔,连接任意⼀个节点都可以,或者可以配置配多个:  
 spring.cloud.nacos.discovery.server-addr=192.168.65.46:8848, 192.168.65.46:
8858, 192.168.65.46:8858  这样其中某个节点就算挂掉了,对于应⽤⽽⾔也能从其他节点获取信息。  
  不过,在应⽤上指定多个ip地址,有⼀个缺点就是,如果⼀旦ip地址发⽣变化,那么就得修改,所以我们可以在nacos集群之上在搭⼀个nginx。  
  先下载⼀个nginx,然后修改conf/nginx配置⽂件:  
   添加upstream  
 upstream nacos-cluster {
server 192.168.65.46:8848;server 192.168.65.46:8858;server 192.168.65.46:8868;
}  添加location:  
 location /nacos {
proxy_pass http://nacos-cluster;
}  启动nginx后,访问 http://localhost/nacos 就可以访问到nacos管理台了,并且在应⽤中只需要配置:  
 spring.cloud.nacos.discovery.server-addr=localhost:80/nacos  即可进⾏服务注册与发现。 
 