前言

記錄下Nacos的整合過程

環境

Win 10 + Spring Cloud 2020.0.1 + Spring Cloud Alibaba 2021.1 + Nacos 2.0.0

Nacos是什麼?

  • Nacos是一個服務發現元件,也是一個配置伺服器,Nacos解決的兩個問題:
1、服務A怎麼找到服務B
2、管理微服務的配置


服務發現原理

  • 服務發現機制

    服務發現機制就是服務消費者總能找到服務提供者的機制,舉個例子:服務發現就像手機中的名片夾,記錄一個人所有的聯絡方式,通過該名片可以聯絡到某個人,而當某個聯絡方式不存在時(服務DOWN)就將其從名片夾中刪除。

  • 用於生產的服務發現機制:

    1、在微服務上做快取,定時任務傳送當前的地址,呼叫時取快取中微服務的地址,該做法好處首先是壓力小,不用每次都去實時取,其次是即使服務發現元件崩潰也可以取到快取中的值,只是無法更新快取中的值。

    2、每個微服務例項都向服務發現元件傳送心跳(即一次請求),告訴服務發現元件自己是活著的,如果服務發現元件發現某一個例項長時間未向自己傳送心跳,即認為該例項已掛,將其健康狀態標記為DOWN,服務消費者即不再呼叫該例項。

搭建 Nacos Server

Nacos Server 下載地址

https://github.com/alibaba/nacos/releases

Nacos Server 的版本選擇

Nacos Server的版本選擇參照標準在spring-cloud-alibaba-dependencies-xxx.pom中有記錄,如我的Spring Cloud Alibaba的版本是2021.1,其推薦的版本是1.4.1(生產環境優先選擇)



由於我這裡是開發環境,我選擇的版本是2.0.0

執行 Nacos Server

startup.cmd -m standalone

  • 訪問http://localhost:8848/nacos/#/login(預設埠是8848)

  • 預設登入賬號/密碼:nacos/nacos


... Nacos Server 搭建完畢

Nacos Client 註冊

user-center 使用者中心微服務註冊

  • pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.coisini</groupId>
<artifactId>user-center</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>user-center</name>
<description>user-center project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.1</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring-cloud-starter-{spring cloud子專案的名稱}-[{模組名稱}]-->
<!-- nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</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>
<!-- 整合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> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
  • application.yml
spring:
application:
# 服務名稱
name: user-center
cloud:
nacos:
discovery:
# 指定nacos server的地址
server-addr: localhost:8848
  • 啟動專案
  • 訪問Nacos


content-center 內容中心微服務註冊

  • pom.xml依賴同上
  • application.yml
spring:
application:
# 服務名稱
name: content-center
cloud:
nacos:
discovery:
# 指定nacos server的地址
server-addr: localhost:8848
  • 訪問Nacos


服務發現測試

  • 內容中心編寫測試程式碼
@RestController
public class TestController { @Autowired
private DiscoveryClient discoveryClient; /**
* 測試:服務發現,證明內容中心總能找到使用者中心
* @return 使用者中心所有例項的地址資訊
*/
@GetMapping("test")
public List<ServiceInstance> getInstances() {
// 查詢指定服務的所有例項的資訊
return discoveryClient.getInstances("user-center");
}
}
  • 如下所示,內容中心可以獲取到使用者中心所有例項的地址資訊




- End -



白嫖有風險
點贊加收藏