一、前言
Nacos
是阿里巴巴于2018年7月推出来的一个开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos
提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。
其关键特性如下:
- 服务发现和服务健康监测
- 动态配置服务
- 动态 DNS 服务
- 服务及其元数据管理
- ...
Nacos
的功能包含 Spring Cloud 组件中的 Spring Cloud Eureka
和 Spring Cloud Config
,本篇章先介绍 Nacos 的服务注册与发现功能。
二、搭建环境
Nacos
作为服务注册发现中心,其运行原理与 Spring Cloud Eureka
大致相同,都由注册中心,服务提供者,服务消费者 3 部分组成和运作。如下图:
与 Spring Cloud Eureka
不同的是,Nacos
服务无需开发者引入 Jar 依赖搭建,只需下载 官网 提供的安装包,解压启动即可。
强调一下,安装Nacos
服务需要满足一下条件:
- 64 bit OS
- 64 bit JDK 1.8+
- Maven 3.2.x+
Nacos
官方提供 2 种安装方式:① GitHub 上下载源码,编译安装启动,② 直接下载编译好的安装包。
笔者选择第二种,点击 Nacos releases 选择 1.4.1 版本的 .zip 文件下载。
本地解压,如下图:
执行如下命令:
1 2 3 4 5 6 7
| cd nacos/bin
# windows 单机模式启动 ./startup.cmd -m standalone
# linux/mac ./startup.sh -m standalone
|
启动成功后,打开浏览器输入 http://localhost:8848/nacos 可以访问Nacos
后台管理界面,默认账户 nacos/nacos,如下图:
Nacos
服务注册中心环境搭建成功。
三、实战演练
注册中心服务搭建完成,现在开始搭建服务提供者和服务消费者。我们搭建如下 3 个项目:
项目名称 | 端口号 | 描述 |
---|
nacos-discovery | 无 | pom 类型的父项目 |
nacos-discovery-provider | 18081 | 子项目,服务提供者 |
nacos-discovery-consumer | 18082 | 子项目,服务消费者 |
3.1 搭建父工程
创建名为 nacos-discovery 的 Maven 项目,修改 pom.xml 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <packaging>pom</packaging>
<dependencyManagement> <dependencies> <!-- spring boot 依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.5.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!-- spring cloud 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR3</version> <type>pom</type> <scope>import</scope> </dependency> <!-- spring cloud alibaba 依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
|
3.2 搭建服务提供者
创建名为 nacos-discovery-provider 的 Maven 项目。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- nacos 服务注册与发现依赖 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
|
- 创建 application.properties:
1 2 3 4 5 6 7 8
| server.port=18081 # 应用名 spring.application.name=nacos-provider # 注册中心地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 # 连接注册中心的账号和密码 spring.cloud.nacos.username=nacos spring.cloud.nacos.password=nacos
|
1 2 3 4 5 6 7 8
| @RestController public class ProviderController {
@RequestMapping("hello/{content}") public String hello(@PathVariable("content") String content) { return "hello, " + content; } }
|
1 2 3 4 5 6 7 8
| @EnableDiscoveryClient @SpringBootApplication public class ProviderApplication {
public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }
|
在启动类上添加@EnableDiscoveryClient
注解。
运行服务提供者,再次访问 http://localhost:8848/nacos ,效果图如下:
服务注册成功。
3.3 搭建服务消费者
创建名为 nacos-discovery-consumer 的 Maven 项目。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<!-- ribbon 依赖,实现客户端负载均衡 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.2.2.RELEASE</version> </dependency>
<!-- nacos 服务注册与发现依赖 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
|
注意:SpringCloudAlibaba 依然采用 Ribbon 作为负载均衡客户端访问远程服务。
- 创建 application.properties:
1 2 3 4 5 6 7 8
| server.port=18082 # 应用名 spring.application.name=nacos-consumer # 注册中心地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 # 连接注册中心的账号和密码 spring.cloud.nacos.username=nacos spring.cloud.nacos.password=nacos
|
1 2 3 4 5 6 7 8 9 10 11 12
| @RestController public class ConsumerController {
@Autowired private RestTemplate restTemplate;
@RequestMapping(value = "{content}") public String hello(@PathVariable String content) { // url = http://服务提供者的应用名称/接口名称/参数 return restTemplate.getForObject("http://nacos-provider/hello/" + content, String.class); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @EnableDiscoveryClient @SpringBootApplication public class ConsumerApplication {
public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } @LoadBalanced @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }
|
在启动类上添加@EnableDiscoveryClient
注解,同时创建RestTemplate
实例并配置负载均衡。
启动后,我们访问消费端接口 http://localhost:18082/Nacos ,结果如下图:
消费者通过Nacos
注册中心获取服务提供者的信息,成功调用其接口。
更多详细资料请点击下方的链接进行查看。
四、参考资料
- Nacos 官网
- Nacos discovery wiki