Nacos 介绍
为什么叫 Nacos?
Nacos 的前四个字母分别为 Naming (服务的域名管理,即服务注册)和 Configuration (服务的配置中心)的前两个字母,最后的 s 为 Service。
Nacos 能干嘛?
- 可以替代 Eureka 做服务注册中心
- 可以替代 Config 做服务配置中心
Nacos 是什么?
Nacos 指 Dynamic Naming and Configuration Service,是一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心,等价于 Eureka+Config+Bus。
Nacos 安装
- 官网下载 Nacos
Nacos 中文官网
Nacos 下载地址
- 解压文件,进入 bin 目录,点击 startup.cmd 文件启动 Nacos。(nacos1.3.2 不能启动(Aug 4, 2020)启动报错:db.num is null)
- 验证安装完成:直接访问 http://localhost:8848/nacos(默认账号和密码都是 nacos)
使用 Nacos 作为服务注册中心
- 新建 Maven 模块:cloudalibaba-provider-payment9001(端口默认 9001)
- 父 POM 文件添加 alibaba 依赖
<!--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添加如下依赖
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency><dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>
</dependencies>
- yml 文件
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
# 开启配置
management:
endpoints:
web:
exposure:
include: '*'
- 主启动类上添加 @EnableDiscoveryClient 注解
- 编写业务类方便最后一步的测试
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;
}
}
- 测试
访问9001模块 http://lcoalhost:9001/payment/nacos/1
查看 nacos 控制台,控制台上显示已经注册了该服务:
Nacos 支持 AP 和 CP 模式的切换,C是所有节点在同一时间看到的数据一致(允许报错);而 A 的定义是所有的请求都会收到响应(不允许报错,允许返回旧数据)
使用 Nacos 作为服务配置中心
-
分布式下多环境多项目管理的两个繁杂问题如下:
-
Nacos 的图形化管理配置界面介绍:
-
Nacos 采用三个级别来映射到一个具体的配置文件:分别是 Namespace + Group + DataId,他们三者的关系如下:
-
怎么在项目的配置文件中指定 Namespace、Group、DataId?
- 指定 Namespace:
spring:
cloud:
nacos:
config:
namespace: 指定 nacos 上配置文件所在的命名空间
- 指定 Group
spring:
cloud:
nacos:
config:
namespace: 指定 nacos 上配置文件所在的命名空间
group: 指定 nacos 上配置文件所在的组
- 指定 DataId
spring:
application:
name: nacos-config-client #这里写当前服务名(将会作为生成的 DataId 的前缀)
profiles:
active: dev #这里写当前所处环境,如dev、test、pro等(将会作为生成的 DataId 的后缀)
spring:
cloud:
nacos:
config:
file-extension: yaml # 指定获取的配置文件时 yaml 格式的
则通过如上的三个配置信息,最后生成的 DataId 为:nacos-config-client-dev.yaml