本文主要是介绍第十章 SpringCloud Alibaba 之 Nacos discovery,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 前言
- 1、Nacos 的命名是由 3 部分组成
- 2、Nacos两大组件
- 3、Nacos 实现服务注册与发现的流程如下:
- 3.1、下载软件
- 3.2、服务提供者
- 3.3、 服务消费者
- 4、实战应用
- 4.1、版本兼容说明
- 4.2、Nacos server安装
- nacos-server-2.0.4.zip
- 4.3、启动nacos
- 4.4、工程改造
- 4.4.1、父pom改造
- 4.4.2、服务提供者改造
- 4.4.3、服务消费者改造
- 4.4.4、 Config配置
- 4.4.5、调用者实例
前言
Nacos 英文全称为 Dynamic Naming and Configuration Service,是一个由阿里巴巴团队使用 Java 语言开发的开源项目。
1、Nacos 的命名是由 3 部分组成
组成部分 | 全称 | 描述 |
---|---|---|
Na | naming/nameServer | 即服务注册中心,与 Spring Cloud Eureka 的功能类似。 |
co | configuration | 即配置中心,与 Spring Cloud Config+Spring Cloud Bus 的功能类似。 |
s | service | 即服务,表示 Nacos 实现的服务注册中心和配置中心都是以服务为核心的。 |
2、Nacos两大组件
组件 | 描述 | 功能 |
---|---|---|
Nacos Server | Nacos 服务端,与 Eureka Server 不同,Nacos Server 由阿里巴巴团队使用 Java 语言编写并将 Nacos Server 的下载地址给用户,用户只需要直接下载并运行即可。 | Nacos Server 可以作为服务注册中心,帮助 Nacos Client 实现服务的注册与发现。 |
– | – | Nacos Server 可以作为配置中心,帮助 Nacos Client 在不重启的情况下,实现配置的动态刷新。 |
Nacos Client | Nacos 客户端,通常指的是微服务架构中的各个服务,由用户自己搭建,可以使用多种语言编写。 | Nacos Client 通过添加依赖 spring-cloud-starter-alibaba-nacos-discovery,在服务注册中心(Nacos Server)中实现服务的注册与发现。 |
– | – | Nacos Client 通过添加依赖 spring-cloud-starter-alibaba-nacos-config,在配置中心(Nacos Server)中实现配置的动态刷新。 |
3、Nacos 实现服务注册与发现的流程如下:
3.1、下载软件
从 Nacos 官方提供的下载页面中,下载 Nacos Server 并运行。
3.2、服务提供者
Nacos Client 启动时,会把服务以服务名(spring.application.name)的方式注册到服务注册中心(Nacos Server)
3.3、 服务消费者
- Nacos Client 启动时,也会将自己的服务注册到服务注册中心;
- 服务消费者在注册服务的同时,它还会从服务注册中心获取一份服务注册列表信息,该列表中包含了所有注册到服务注册中心上的服务的信息(包括服务提供者和自身的信息);
- 在获取了服务提供者的信息后,服务消费者通过 HTTP 或消息中间件远程调用服务提供者提供的服务。
4、实战应用
4.1、版本兼容说明
https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
4.2、Nacos server安装
下载:
https://github.com/alibaba/nacos/releases/tag/2.0.4
nacos-server-2.0.4.zip
4.3、启动nacos
Nacos Server 下各目录说明如下:
- bin:用于存放 Nacos 的可执行命令。
- conf:用于存放 Nacos 配置文件。
- target:用于存放 Nacos 应用的 jar 包。
进入bin目录,执行启动命令:startup.cmd -m standalone
http://localhost:8848/nacos
用户名/密码:nacos/nacos
4.4、工程改造
4.4.1、父pom改造
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.10</version><relativePath/> <!-- lookup parent from repository -->
</parent><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.5</version><type>pom</type><scope>import</scope></dependency><!--spring cloud alibaba 依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.0.4.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version><configuration><source>${maven.compiler.source}</source><target>${maven.compiler.target}</target></configuration></plugin></plugins></build>
4.4.2、服务提供者改造
- 添加依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2021.0.4.0</version>
</dependency>
- 添加配置
spring:application:name: app-provider-service #服务名cloud:nacos:discovery:server-addr: localhost:8848
- 启动类加注解
@EnableDiscoveryClient
启动应用,查看nacos后台
4.4.3、服务消费者改造
- 添加依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2021.0.4.0</version>
</dependency>
- 添加配置
spring:application:name: app-api-service #服务名cloud:nacos:discovery:server-addr: localhost:8848 #Nacos server 的地址
- 启动类添加注解
@EnableDiscoveryClient
4.4.4、 Config配置
创建config文件夹,在下面添加LoadBalancedConfig配置
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class LoadBalancedConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}}
4.4.5、调用者实例
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.Map;@RestController
@RequestMapping("/user")
public class UserController {private final static String SERVER_URL = "http://localhost:8080";@Autowiredprivate RestTemplate restTemplate;@GetMapping("/getUserName")public Map getUserName() {String url = SERVER_URL + "/user/getUserName";Map map = restTemplate.getForObject(url , Map.class);map.put("type" , "caller");return map;}}
这篇关于第十章 SpringCloud Alibaba 之 Nacos discovery的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!