文章目录
- Nacos Server
- 下载
- 启动
- 登录
- 创建命名空间
- Nacos Client
- 启动样例
- Nacos 服务发现配置项
- 集成 OpenFeign 远程接口调用
- 添加 OpenFeign 依赖
- 开启 @EnableFeignClients 注解
- 编写远程服务接口
- 远程接口调用
- 集成 Sentinel 熔断降级
- 添加 Sentinel 依赖
- 开启 Sentinel 熔断降级
- 编写降级回调类
- 添加 fallback 属性
- 集成 GateWay 动态路由
Nacos 官网:https://nacos.io
Nacos GitHub 地址:https://github.com/alibaba/nacos
spring-cloud-alibaba GitHub 地址:https://github.com/alibaba/spring-cloud-alibaba
Spring Cloud Alibaba 组件版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
Nacos(Naming and Configuration Service,命名和配置服务)是一个动态服务发现、配置管理和服务治理的一站式解决方案,致力于快速构建、部署和管理微服务平台。
Nacos的主要功能包括:
- 服务发现:Nacos提供了一个基于DNS和HTTP的服务发现机制,使得服务之间能够轻松地找到对方并建立连接。
- 服务治理:Nacos提供了丰富的服务治理功能,包括熔断、限流和负载均衡等,帮助您构建稳定、可靠的微服务系统。
- 配置管理:Nacos支持中心化、外部化和动态化的配置管理,可以为微服务应用提供实时的配置更新,允许在不重启应用的情况下更新配置。
Nacos Server
下载
查看 Spring Cloud Alibaba 的各组件版本:
Spring Cloud Alibaba Version | Sentinel Version | Nacos Version | RocketMQ Version | Dubbo Version | Seata Version |
---|---|---|---|---|---|
2022.0.0.0-RC2 | 1.8.6 | 2.2.1 | 4.9.4 | ~ | 1.7.0-native-rc2 |
2021.0.5.0 | 1.8.6 | 2.2.0 | 4.9.4 | ~ | 1.6.1 |
2.2.10-RC1 | 1.8.6 | 2.2.0 | 4.9.4 | ~ | 1.6.1 |
2022.0.0.0-RC1 | 1.8.6 | 2.2.1-RC | 4.9.4 | ~ | 1.6.1 |
2.2.9.RELEASE | 1.8.5 | 2.1.0 | 4.9.4 | ~ | 1.5.2 |
进入 Nacos GitHub,点击【Tags】:
进入对应的【Tag】,下载对应的版本文件:
Nacos 下载完成:
启动
将压缩文件进行解压,目录如下:
创建数据库【nacos】:
导入 \nacos\conf
目录下的 nacos-mysql.sql
数据库文件:
查看数据库内容,包含和配置文件,命名空间,用户有关的数据表:
修改 \nacos\conf
目录下的 application.properties
配置文件:
修改启动模式,将集群模式【cluster】改为单机模式【standalone】:
Windows 运行 nacos\bin
目录下的 startup.cmd
文件:
登录
访问链接:http://localhost:8848/nacos,使用默认账号密码登录【nacos
:nacos
】:
创建命名空间
依次点击左侧菜单【命名空间→新建命名空间】,输入表格内容,点击【确定】即可:
Nacos Client
启动样例
创建对应版本的 SpringBoot 项目:
选择相关依赖,如 web、Nacos Service Discovery
:
Pom.xml 中依赖如下:
<properties>
<!--spring-boot 版本-->
<spring-boot.version>2.3.12.RELEASE</spring-boot.version>
<!--spring-cloud-alibaba 版本-->
<spring-cloud-alibaba.version>2.2.9.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<!--web 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring-cloud-alibaba-nacos 依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- spring-boot 依赖管理-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud-alibaba 依赖管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
YAML 配置如下:
server:
port: 8080
spring:
application:
name: nacos-client-a
cloud:
nacos:
server-addr: localhost:8848 # nacos server 的地址 默认localhost:8848
username: nacos
password: nacos
discovery: # 注册相关配置
namespace: 9889d187-8b66-41f9-a554-d3d0635c0ee9 # 命名空间的 id
group: A_GROUP # 分组名称,默认为:DEFAULT_GROU
启动项目,显示 nacos 注册, 默认组 nacos-client-a 192.168.152.1:8080 注册完成
:
查看 Nacos Server 中的服务列表:
Nacos 服务发现配置项
nacos.discovery
是 Nacos 中与服务注册与发现相关的配置项前缀,包含以下配置:
配置项 | Key | 默认值 | 说明 |
---|---|---|---|
服务注册中心地址 | spring.cloud.nacos.discovery.server-addr | 无 | 多个地址可以使用逗号隔开 |
命名空间 | spring.cloud.nacos.discovery.namespace | 实现多租户的注册与发现(区分隔离) | |
服务名 | spring.cloud.nacos.discovery.service | ${spring.application.name} | 服务列表的服务名称 |
服务分组 | spring.cloud.nacos.discovery.group | DEFAULT_GROUP | 服务的分组信息 |
权重 | spring.cloud.nacos.discovery.weight | 1 | 取值范围1-100,数值越大,权重越大 |
网卡名 | spring.cloud.nacos.discovery.network-interface | 无 | 当 IP 未配置时,注册的 IP 为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址 |
注册 IP 地址 | spring.cloud.nacos.discovery.ip | 无 | 优先级最高 |
注册端口 | spring.cloud.nacos.discovery.port | -1 | 默认情况下不用配置,会自动探测 |
阿里云账号 | spring.cloud.nacos.discovery.access-key | 无 | 当要上阿里云时,阿里云上面的一个云账号名 |
阿里云密码 | spring.cloud.nacos.discovery.secret-key | 无 | 当要上阿里云时,阿里云上面的一个云账号密码 |
元数据 | spring.cloud.nacos.discovery.metadata | 无 | 服务实例的元数据信息,使用 Map 格式配置 |
日志文件名 | spring.cloud.nacos.discovery.log-name | 无 |
集成 OpenFeign 远程接口调用
添加 OpenFeign 依赖
添加 spring-cloud 和 spring-cloud-openfeign 依赖:
<properties>
<!--spring-cloud 版本-->
<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
</properties>
<dependencies>
<!--spring-cloud-openfeign 依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- spring-cloud 依赖管理-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
开启 @EnableFeignClients 注解
@EnableFeignClients //开启 Feign
@EnableDiscoveryClient //开启服务发现
@SpringBootApplication
public class NacosApplication {
public static void main(String[] args) {
SpringApplication.run(NacosApplication.class, args);
}
}
编写远程服务接口
@FeignClient(value = "nacos-user-service") //调用服务的服务名称
public interface UserFeignService {
@GetMapping("info") //调用的服务接口
String getInfo();
}
远程接口调用
编写 UserController 接口调用服务:
@RestController
public class UserController {
@Autowired
private UserFeignService userFeignService;
@GetMapping("userInfo")
public String getUserInfo(){
return userFeignService.getInfo();
}
}
注:服务之前需要在同一个命名空间和分组下,否则不能发现服务(环境隔离)。
集成 Sentinel 熔断降级
添加 Sentinel 依赖
<!--sentinel 依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
开启 Sentinel 熔断降级
在 YAML 配置文件中开启 Sentinel 熔断降级:
feign:
sentinel:
enabled: true
编写降级回调类
编写 UserFeignService 服务的接口实现类 UserFeignFallbackService
:
/**
* UserFeignService 降级回调类
*/
@Component
public class UserFeignFallbackService implements UserFeignService {
public String getInfo() {
return UUID.randomUUID().toString();
}
}
注:当 UserFeignService
中的接口调用出现异常或服务提供者下线时,就会调用 UserFeignFallbackService
类中对应得方法进行降级处理。
添加 fallback 属性
在 UserFeignService
接口的注解 @FeignClient
上添加 fallback 属性,指定降级回调类:
@FeignClient(value = "nacos-user-service",fallback = UserFeignFallbackService.class) //调用服务的服务名称
public interface UserFeignService {
@GetMapping("info")
String getInfo();
}
集成 GateWay 动态路由
添加 Gateway 依赖:
<!--gateway 依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
YAML 文件中添加配置:
server:
port: 8081
spring:
application:
name: nacos-client-b
cloud:
nacos:
server-addr: localhost:8848 # nacos server 的地址
username: nacos # Nacos 用户名
password: nacos # Nacos 密码
discovery: # 注册相关配置
namespace: 9889d187-8b66-41f9-a554-d3d0635c0ee9 # 命名空间的 id
group: A_GROUP # 分组名称,默认为:DEFAULT_GROUP
gateway:
discovery:
locator:
enabled: true # 开启动态路由
lower-case-service-id: true
添加 @EnableDiscoveryClient
注解:
@EnableDiscoveryClient
@SpringBootApplication
public class NacosGateWayApplication {
public static void main(String[] args) {
SpringApplication.run(NacosGateWayApplication.class, args);
}
}