系列文章目錄
第一章 Java線程池技術應用
第二章 CountDownLatch和Semaphone的應用
第三章 Spring Cloud 簡介
第四章 Spring Cloud Netflix 之 Eureka
第五章 Spring Cloud Netflix 之 Ribbon
第六章 Spring Cloud 之 OpenFeign
第七章 Spring Cloud 之 GateWay
第八章 Spring Cloud Netflix 之 Hystrix
第九章 代碼管理gitlab 使用
第十章 SpringCloud Alibaba 之 Nacos discovery
前言
Nacos 英文全稱為 Dynamic Naming and Configuration Service,它是一個開源的、易于使用的、功能強大的配置和發(fā)現(xiàn)管理系統(tǒng),由阿里巴巴團隊使用 Java 語言開發(fā)的開源項目。Nacos 為微服務架構提供了一種簡單、靈活、動態(tài)的配置管理方案,可以支持大規(guī)模的分布式系統(tǒng)和云原生應用。它旨在提供動態(tài)服務發(fā)現(xiàn)、配置管理和服務管理等功能,幫助開發(fā)者構建易于擴展、動態(tài)適應的分布式系統(tǒng)。
1、Nacos 的命名是由 3 部分組成
組成部分 | 全稱 | 描述 |
---|---|---|
Na | naming/nameServer | 即服務注冊中心,與 Spring Cloud Eureka 的功能類似。 |
co | configuration | 即配置中心,與 Spring Cloud Config+Spring Cloud Bus 的功能類似。 |
s | service | 即服務,表示 Nacos 實現(xiàn)的服務注冊中心和配置中心都是以服務為核心的。 |
1.1、技術升級和替換
前幾章節(jié)我們介紹了Spring Cloud Netflix套件,今天開始我們升級成使用Spring Cloud Alibaba。
Spring Cloud Alibaba 的 Nacos discovery,會替換掉Spring Cloud Netflix 的 Eureka。
1.2、系統(tǒng)架構圖
整個電商微服務架構,選用Spring Cloud Alibaba套件,包括:
- 熔斷限流(Spring Cloud Alibaba Sentinel)
- 微服務注冊中心(Nacos Discovery)
- 微服務配置(Nacos Discovery Config)
- 微服務調(diào)用(Nacos Discovery)
再加上Spring Cloud組件:
- 負載均衡(openFeign)
- 網(wǎng)關(Gateway)
以及:
- 分庫分表(Apache ShardingSphere-JDBC)
- 緩存集群(Redis主從)
2、Nacos兩大組件
組件 | 描述 | 功能 |
---|---|---|
Nacos Server | Nacos 服務端,與 Eureka Server 不同,Nacos Server 由阿里巴巴團隊使用 Java 語言編寫并將 Nacos Server 的下載地址給用戶,用戶只需要直接下載并運行即可。 | Nacos Server 可以作為服務注冊中心,幫助 Nacos Client 實現(xiàn)服務的注冊與發(fā)現(xiàn)。 |
– | – | Nacos Server 可以作為配置中心,幫助 Nacos Client 在不重啟的情況下,實現(xiàn)配置的動態(tài)刷新。 |
Nacos Client | Nacos 客戶端,通常指的是微服務架構中的各個服務,由用戶自己搭建,可以使用多種語言編寫。 | Nacos Client 通過添加依賴 spring-cloud-starter-alibaba-nacos-discovery,在服務注冊中心(Nacos Server)中實現(xiàn)服務的注冊與發(fā)現(xiàn)。 |
– | – | Nacos Client 通過添加依賴 spring-cloud-starter-alibaba-nacos-config,在配置中心(Nacos Server)中實現(xiàn)配置的動態(tài)刷新。 |
3、Nacos 實現(xiàn)服務注冊與發(fā)現(xiàn)的流程如下:
3.1、下載軟件
從 Nacos 官方提供的下載頁面中,下載 Nacos Server 并運行。
3.2、服務提供者
Nacos Client 啟動時,會把服務以服務名(spring.application.name)的方式注冊到服務注冊中心(Nacos Server)
3.3、 服務消費者
- Nacos Client 啟動時,也會將自己的服務注冊到服務注冊中心;
- 服務消費者在注冊服務的同時,它還會從服務注冊中心獲取一份服務注冊列表信息,該列表中包含了所有注冊到服務注冊中心上的服務的信息(包括服務提供者和自身的信息);
- 在獲取了服務提供者的信息后,服務消費者通過 HTTP 或消息中間件遠程調(diào)用服務提供者提供的服務。
4、實戰(zhàn)應用
4.1、版本兼容說明
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
4.2、Nacos server安裝
下載:
https://github.com/alibaba/nacos/releases/tag/2.0.4
4.3、啟動nacos
Nacos Server 下各目錄說明如下:
- bin:用于存放 Nacos 的可執(zhí)行命令。
- conf:用于存放 Nacos 配置文件。
- target:用于存放 Nacos 應用的 jar 包。
進入bin目錄,執(zhí)行啟動命令:startup.cmd -m standalone
http://localhost:8848/nacos
用戶名/密碼:nacos/nacos
4.4、工程改造
4.4.1、父pom改造
<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>
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配置
創(chuàng)建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
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
4.4.5、調(diào)用者實例
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";
@Autowired
private 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;
}
}
5、集成openFeign
5.1、修改調(diào)用方配置文件
5.1.1、增加springcloud依賴
<dependencyManagement>
<dependencies>
<!--spring cloud 依賴-->
<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>
5.1.2、增加openFeign依賴項
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-loadbalancer -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies>
5.2、調(diào)用方代碼改造
5.2.1、在啟動類增加openFeign配置
@EnableFeignClients文章來源:http://www.zghlxwxcb.cn/news/detail-713647.html
5.2.2、新增服務層接口:UserService
import com.xxx.common.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(name = "app-provider-service")
public interface UserService {
@GetMapping("/user/getUserName")
public User getUserName() ;
}
5.2.3、改造控制層方法:
@Autowired
private UserService userService;
@GetMapping("/getUserName")
public Map getUserName() {
User user = userService.getUserName();
Map map = new HashMap();
map.put("code" , 200);
map.put("data" , user);
map.put("type" , "caller");
return map;
}
總結(jié)
云原生微服務治理有很多手段,但在Java生態(tài)里,最主流的還是Spring Cloud Alibaba 、Spring Cloud Netflix。
Spring Cloud文章的前部分已經(jīng)把Spring Cloud Netflix相關組件講解且實踐過了,這章我們講解了Spring Cloud Alibaba的Nacos discovery,后續(xù)還會繼續(xù)講解完Spring Cloud Alibaba其他組件。文章來源地址http://www.zghlxwxcb.cn/news/detail-713647.html
到了這里,關于云原生微服務實戰(zhàn) Spring Cloud Alibaba 之 Nacos的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!