这里写目录标题
Nacos简介
为什么叫Nacos
Naming和Configuration的前两个字母,最后的s为service。
Nacos是什么
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos能干嘛
Nacos就是注册中心+配置中心。
能替代Eureka做注册中心,替代Config做服务配置中心。
安装并运行Nacos
- 本地jdk和Maven环境
- 从官网下载Nacos压缩包()
- 解压安装包,直接运行bin目录下的starup.cmd
- 运行成功后直接访问:http://localhost:8848/nacos
Nacos作为服务注册中心
创建两个支付服务提供者模块
1.导入依赖
父POM
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
子POM
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.配置文件
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
启动类
package com.atguigu.springcloud.alibaba;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient //开启服务注册与发现
@SpringBootApplication
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class,args);
}
}
业务类
package com.atguigu.springcloud.alibaba.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PaymentController
{
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id)
{
return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
}
}
实例
Nacos负载均衡
在服务启动多个实例时 ,另一个服务对当前服务进行调用时,nacos支持负载均衡。因为nacos有ribbon的j依赖,默认负载均衡的方式是轮询。
各大注册中心对比
Nacos作为配置中心
我们通过创建nacos-config-client模块,并在Nacos页面中添加配置信息来演示下配置管理的功能。
创建nacos-config-client模块
1.在pom.xml中添加相关依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.添加配置文件application.yml,启用的是dev环境的配置:
spring:
profiles:
active: dev
3.添加配置文件bootstrap.yml,主要是对Nacos的作为配置中心的功能进行配置:
server:
port: 9101
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
# Nacos地址
server-addr: http://localhost:8848
config:
# Nacos地址
server-addr: http://localhost:8848
# 这里我们获取的yaml格式的配置
file-extension: yaml
4.创建ConfigClientController,从Nacos配置中心中获取配置信息:
@RestController
@RefreshScope //nacos支持动态刷新
public class ConfigClientController {
@Value("${config.info}") //读取nacos配置中心中的配置
private String info;
@GetMapping("/config/info")
public String getInfo(){
return info;
}
}
在Nacos中添加配置
我们先来讲下Nacos中的dataid的组成格式及与SpringBoot配置文件中的属性对应关系:
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
比如说我们现在要获取应用名称为nacos-config-client的应用在dev环境下的yaml配置,dataid如下:
nacos-config-client-dev.yaml
按照以上dataid添加如下配置:
config:
info: "config info for dev"
填写配置示意图:
启动nacos-config-client,调用接口查看配置信息:http://localhost:9101/config/info
nacos-config,version=123
Nacos的动态刷新配置
我们只要修改下Nacos中的配置信息,再次调用查看配置的接口,就会发现配置已经刷新,Nacos和Consul一样都支持动态刷新配置。