2

Spring Cloud Alibaba 系列之 Nacos 篇(服务注册与发现) | 月光中的污点

 3 years ago
source link: https://www.extlight.com/2021/03/05/Spring-Cloud-Alibaba-%E7%B3%BB%E5%88%97%E4%B9%8B-Nacos-%E7%AF%87%EF%BC%88%E6%9C%8D%E5%8A%A1%E6%B3%A8%E5%86%8C%E4%B8%8E%E5%8F%91%E7%8E%B0%EF%BC%89/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
loading.jpg

『 Spring Cloud Alibaba 系列之 Nacos 篇(服务注册与发现) 』

2021 年 03 月 05 日361 浏览

Nacos 是阿里巴巴于2018年7月推出来的一个开源项目,是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 提供了一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。

其关键特性如下:

  • 服务发现和服务健康监测
  • 动态配置服务
  • 动态 DNS 服务
  • 服务及其元数据管理

Nacos 的功能包含 Spring Cloud 组件中的 Spring Cloud EurekaSpring Cloud Config,本篇章先介绍 Nacos 的服务注册与发现功能。

二、搭建环境

Nacos 作为服务注册发现中心,其运行原理与 Spring Cloud Eureka 大致相同,都由注册中心,服务提供者,服务消费者 3 部分组成和运作。如下图:

Spring Cloud Eureka 不同的是,Nacos 服务无需开发者引入 Jar 依赖搭建,只需下载 官网 提供的安装包,解压启动即可。

强调一下,安装Nacos服务需要满足一下条件:

  1. 64 bit OS
  2. 64 bit JDK 1.8+
  3. Maven 3.2.x+

Nacos官方提供 2 种安装方式:① GitHub 上下载源码,编译安装启动,② 直接下载编译好的安装包。

笔者选择第二种,点击 Nacos releases 选择 1.4.1 版本的 .zip 文件下载。

本地解压,如下图:

执行如下命令:

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-provider18081子项目,服务提供者nacos-discovery-consumer18082子项目,服务消费者

3.1 搭建父工程

创建名为 nacos-discovery 的 Maven 项目,修改 pom.xml 文件:

<packaging>pom</packaging>

<dependencyManagement>
<dependencies>
<!-- spring boot 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.5</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>
复制

注意:Spring Boot、Spring Cloud 和 Spring Cloud Alibaba 版本需要对应

3.2 搭建服务提供者

创建名为 nacos-discovery-provider 的 Maven 项目。

  • 修改 pom.xml 文件:
<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:
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
复制
  • 编写提供接口:
@RestController
public class ProviderController {

@RequestMapping("hello/{content}")
public String hello(@PathVariable("content") String content) {
return "hello, " + content;
}
}
复制
  • 修改启动类:
@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 项目。

  • 修改 pom.xml 文件:
<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:
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
复制
  • 创建消费接口:
@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);
}
}
复制
  • 修改启动类
@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注册中心获取服务提供者的信息,成功调用其接口。

更多详细资料请点击下方的链接进行查看。

四、参考资料


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK