1. 程式人生 > 其它 >SpringCloud Alibaba nacos

SpringCloud Alibaba nacos

Spring Cloud Alibaba

1.建立父專案,刪除Src層,並修改pom檔案,宣告parent,並且依賴版本限制。
2.在父專案中建立子專案,並修改配置檔案。
3.建立實體類,controller層,dao層,service層,service層實現類。

註冊中心 nacos
服務治理:當微服務有很多的時候,或服務部署在不同伺服器上時,通過前端寫死請求路徑不現實。需要有專門的工具 來管理所有的請求。
註冊中心:
1.當前端請求後端時,先走註冊中心拉取訪問地址的清單,然後在向後端發起請求。
2.當後端出現問題時,註冊中心會將該訪問途徑剔除,防止出現意料之外的問題。

常用的註冊中心。

1.Zookeeper:

Apache Hadop的一個子專案,主要用來解決分散式專案中的一些資料管理問題。如:統一命名服務、狀態同步服務、叢集管理、分散式應用配置項的管理等。

2.Eureka:

SpringCloud (Netflix)中使用的元件,主要用來服務的註冊與發現,已經閉源。

3.Consul:

 這個是GO語言開發的開源工具,主要面向分散式,服務化的系統提供服務註冊、服務發現和配置管理的功能。Consul功能都很實用
 功能包括:服務註冊/發現、健康檢查、key/value 儲存、多資料中心和分散式一致性保證等特性。Consul本身只是一個二進位制的可執行檔案,所以安裝和部署都非常簡單,
 只需要從官網下載,再執行對應的啟動指令碼即可。

4.Nacos:

Nacos是一個易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。他是Spring Cloud Alibaba元件之一,負責服務註冊發現和服務配置,可以認為
Nacos = Eureka + config。

Nacos簡介

Nacos致力於幫助您發現、配置和管理微服務。Nacos提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元資料及流量管理。
Nacos的作用就是一個註冊中心,用來管理註冊上來的各個微服務。

Nacos使用

1.安裝nacos-server,通過nacos-server壓縮檔案解壓後,檢視目錄中bin中存在啟動指令碼,雙擊執行startup.cmd則nacos啟動。
nacos會提供一個服務監控的頁面,路徑是啟動時列印cmd視窗中的埠 預設為 8848 整體路徑為 localhost:8848/nacos  賬號:nacos 密碼:nacos
2.在pom檔案中新增nacos依賴
//2.Nacos依賴
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
//3.在啟動類中添加註解開啟nacos
@SpringBootApplication
@EnableDiscoveryClient
public class ProductApplication
//4.在application.yml檔案中新增nacos的服務地址。
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
//簡單使用
@Autowired      //注入DiscoveryClient;
DiscoveryClient discoveryClient;

public void Test(){
  List<ServiceInstance> instances = discoveryClient.getInstances("");  //傳入引數為nacos的serviceIdsd。
  ServiceInstance instance = instances.get(0);
  instance.getHost();  //IP地址
  instance.getPost();  //埠號
}

負載均衡

定義:當同一個微服務做了叢集部署時,不能讓nacos預設只訪問第一個服務,需要nacos為其分配不通的訪問。
1.根據負載均衡發生位置不通分為客戶端負載均衡、服務端負載均衡。(客戶端負載均衡:前端請求不同地址。服務端負載均衡:前端請求同一地址、nacos為其分配不同後臺。)
//簡單實現服務端負載均衡
List<ServiceInstance> instances = discoveryClient.getInstances("");  //傳入引數為nacos的serviceIdsd。
int index = new Random().nextInt(instances.size());    //採用隨機數的形式實現負載均衡。
ServiceInstance instance = instances.get(index);
instance.getHost();  //IP地址
instance.getPost();  //埠號