SpringCloud Alibaba nacos
阿新 • • 發佈:2021-07-14
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(); //埠號