什么是Nacos?
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 是Spring Cloud A 中的服务注册发现组件,类似于Consul、Eureka,同时它又提供了分布式配置中心的功能,这点和Consul的config类似,支持热加载。
Nacos 的关键特性包括:
- 服务发现和服务健康监测
- 动态配置服务,带管理界面,支持丰富的配置维度。
- 动态 DNS 服务
- 服务及其元数据管理
Nacos 官网文档:
https://nacos.io/zh-cn/docs/quick-start.html
Nacos 部署:
下载地址:https://github.com/alibaba/nacos/releases
- Linux/Unix/Mac:
sh startup.sh -m standalone - Windows:
cmd startup.cmd -m standalone
nacos的启动端口为8848,在启动时要保证端口不被占用,启动成功,在浏览器上访问:http://localhost:8848/nacos,默认的登陆用户名/密码为nacos
Nacos 可持久化配置:
- 找到conf目录下sql脚本,把脚本导入mysql数据库中

- 编辑application.properties,添加如下代码
spring.datasource.platform=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=nacos
db.password=nacos
- 在配置管理配置列表中添加nacos配置

- 查看config_info是否已经持久化到数据库中

使用Nacos服务注册和发现
服务注册和发现是微服务治理的根基,服务注册和发现组件是整个微服务系统的灵魂,选择合适的服务注册和发现组件至关重要,目前主流的服务注册和发现组件有Consul、Eureka、Etcd等。 随着Eureka的闭源,Spring cloud netflix-oss组件大规模的进入到了维护期,不再提供新功能,spring cloud alibaba受到开源社区的大力拥护。
服务注册
使用两个服务注册到Nacos上,分别为nacos-provider和nacos-consumer。
服务提供者nacos-provider
1. 添加项目依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
2. 在application.yml配置nacos服务地址
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 127.0.0.1:8848
3. 在springboot启动文件中添加@EnableDiscoveryClient注解

4. 在nacos-provider提供个API服务
@GetMapping("/hi")
public String sayHello(@RequestParam String name){
return name;
}
5. 启动服务,可以发现nacos-provider已经向nacos-server注册

服务消费者nacos-consumer
nacos作为服务注册和发现组件时,在进行服务消费,选择Feign
1. 添加Feign依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
3. 在springboot启动文件中添加@EnableDiscoveryClient注解
@EnableDiscoveryClient
@EnableFeignClients
4. 添加配置
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 31398485-c414-45d1-9f0c-426011114fa5
5. 写一个FeignClient,调用nacos-provider的服务
@Component
@FeignClient("nacos-provider")
public interface ProviderClient {
@GetMapping("/hi")
String sayHello(@RequestParam String name);
}
6. 消费api服务
@RestController
@Slf4j
public class ConsumerController {
@Autowired
private ProviderClient providerClient;
@GetMapping("/consumer")
public String sayHello(@RequestParam String name){
return providerClient.sayHello(name);
}
}
在浏览器上访问http://localhost:9999/consumer?name=ccc
,调用成功

深入思考
如果之前已经用过Spring Cloud的读者,肯定会这样的感受:不论我用的是RestTempalte也好、还是用的WebClient也好,还是用的Feign也好,似乎跟我用不用Nacos没啥关系?我们在之前介绍Eureka和Consul的时候,也都是用同样的方法来实现服务调用的,不是吗?
确实是这样,对于Spring Cloud老手来说,就算我们更换了Nacos作为新的服务注册中心,其实对于我们应用层面的代码是没有影响的。那么为什么Spring Cloud可以带给我们这样的完美编码体验呢?实际上,这完全归功于Spring Cloud Common的封装,由于在服务注册与发现、客户端负载均衡等方面都做了很好的抽象,而上层应用方面依赖的都是这些抽象接口,而非针对某个具体中间件的实现。所以,在Spring Cloud中,我们可以很方便的去切换服务治理方面的中间件。
9337

被折叠的 条评论
为什么被折叠?



