一、Nacos简介
Nacos核心提供两个功能:服务注册与发现,动态配置管理。
1、服务注册与发现
Nacos提供基于DNS和基于RPC的服务发现,即能被用来支持https/http的服务注册与发现,也支持RPC如dubbo的服务注册与发现。
与Dubbo使用的zookeeper相比而言,两者差异还是比较大的,zookeeper是一种分布式的协调服务,它天生是作为分布式数据一致性场景下的解决方案,所以zookeeper是CP的,它牺牲了可用性来保证一致性,在极端情况下(master选举期间)服务会对外停止,对于服务可用性要求比较高的系统是难以接受的。Nacos是一种去中心化的架构,属于CAP理论里的AP架构,支持最终一致性,在分布式服务发现与注册场景下具有很不错的性能。目前dubbo官方也支持使用Nacos代替zookeeper。
2、动态配置服务
动态修改配置并实时生效对于服务端的同学而已并不陌生,这种服务能够让我们的服务拥有更多的灵活性,不需要重启服务即可做到配置实时生效,非常适合于“配置优先”的服务开发。
二、Nacos安装(windows)
1.下载安装
下载地址:https://github.com/alibaba/nacos/releases/tag/1.1.0
选择:nacos-server-1.1.0.zip或者nacos-server-1.1.0.tar.gz 下载;下载完成解压。解压文件中的bin文件夹中有个startup.cmd文件,双击该文件就可以启动。启动成功后会弹出一个cmd窗口。启动失败则不会弹出。
2.访问
访问地址:http://localhost:8848/nacos/index.html 用户名密码:nacos/nacos
windows7、JDK8、nacos-server-1.1.0、springboot-2.1.9.RELEASE、springcloud-Greenwich.SR3、spring-cloud-alibaba-dependencie-0.9.0.RELEASE
创建一个聚合工程SpringCloudNacos作为父工程,pom.xml如下
4.0.0
com.learning.nacos
springcloudnacos
0.0.1-SNAPSHOT
springcloudnacos
Demo project for Spring Boot
1.8
2.1.9.RELEASE
Greenwich.SR3
0.9.0.RELEASE
org.projectlombok
lombok
1.18.2
provided
org.springframework.boot
spring-boot-starter-test
test
org.junit.jupiter
junit-jupiter-api
5.5.2
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import
org.springframework.cloud
spring-cloud-alibaba-dependencies
${nacos.version}
pom
import
在父工程springcloudnacos下创建子工程nacos-provider(服务提供者)。pom.xml如下:
4.0.0
com.learning.nacos
springcloudnacos
0.0.1-SNAPSHOT
com.sprincloud.nacos
nacos-provider
0.0.1-SNAPSHOT
nacos-provider
Demo project for Spring Boot
1.8
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
0.9.0.RELEASE
org.springframework.boot
spring-boot-maven-plugin
在启动类NacosProviderApplication中提供一个对外接口,并添加@EnableDiscoveryClient注解,开启注册发现功能。
package com.sprincloud.nacos.nacosprovider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
@GetMapping("/hello")
public String helloNacos(){
return "Hello Nacos !";
}
}
最好一步:application.yml配置文件:
server:
port: 8001
spring:
application:
name: nacos-provide
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
在父工程springcloudnacos下创建子工程nacos-consumers(服务消费者)。pom.xml文件和nacos-provider一样。
服务消费者通过TestTemplate+Ribbon进行服务调用;NacosConsumersApplication启动类代码如下:
package com.springcloud.nacos.nacosconsumers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConsumersApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConsumersApplication.class, args);
}
@Autowired
private RestTemplate template;
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@GetMapping("/consumer")
public String test1() {
return template.getForObject("http://nacos-provider/hello",String.class);
}
}
application.yml配置如下:
server:
port: 8002
spring:
application:
name: nacos-consumers
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
先启动启动nacos,然后运行刚刚创建好的两个子工程。