一. Nacos與Eureka
1.1 什麼是註冊中心?
- 註冊中心可以說是微服務架構中的”通訊錄“,它記錄了服務和服務地址的映射關係。在分佈式架構中,服務會註冊到這裏,當服務需要調用其它服務時,就到這裏找到服務的地址,進行調用。
- 簡單來說,註冊中心就類似一個通訊錄;當我們需要給某某某打電話(消費某個服務,調用某個服務的接口)的時候,通過註冊中心,我們知道這個人的號碼(知道服務是否正常,服務調用路徑等信息),就可以直接打電話了;
- 也就是說,註冊中心將各個服務登記在上面,並持續檢查其服務是否正常,當外界訪問接口時,可直接通過註冊中心獲取服務相關的信息;
1.2 什麼是Eureka?
- Eureka是Netflix開發的服務發現框架,本身是一個基於REST的服務,主要用於定位運行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。SpringCloud將它集成在其子項目spring-cloud-netflix中,以實現SpringCloud的服務發現功能。
- eureka包含兩個組件:Eureka Server和Eureka Client。
- Eureka Client是一個java客戶端,用於簡化與Eureka Server的交互,客戶端同時也就是一個內置的、使用輪詢(round-robin)負載算法的負載均衡器。在應用啓動後,將會向Eureka Server發送心跳,默認週期爲30秒,如果Eureka Server在多個心跳週期內沒有接收到某個節點的心跳,Eureka Server將會從服務註冊表中把這個服務節點移除(默認90秒)。
- Eureka Server之間通過複製的方式完成數據的同步,Eureka還提供了客戶端緩存機制,即使所有的Eureka Server都掛掉,客戶端依然可以利用緩存中的信息消費其他服務的API。綜上,Eureka通過心跳檢查、客戶端緩存等機制,確保了系統的高可用性、靈活性和可伸縮性。
1.3 什麼是服務發現?什麼是服務註冊?
- 什麼是服務發現?
- 服務發現是指使用一個註冊中心來記錄分佈式系統中的全部服務的信息,以便其他服務能夠快速的找到這些已註冊的服務。
- 什麼是服務註冊?
- 服務發現是針對消費者而言的,而服務註冊則是針對生產者(服務提供方)而言的。服務配置自身的信息,將自己的信息發送至註冊中心,保持自己的狀態,這就是服務註冊;
1.4 什麼是Nacos?
- 英文全稱Dynamic Naming and Configuration Service,Na爲naming/nameServer即註冊中心,co爲configuration即註冊中心,service是指該註冊/配置中心都是以服務爲核心。服務在nacos是一等公民
- Nacos 是阿里巴巴的新開源項目,其核心定位是 “一個更易於幫助構建雲原生應用的動態服務發現、配置和服務管理平臺”。它同時是SpringCloud Alibaba全家桶中的一個基石;
- 使用Nacos我們可以完成註冊中心,配置中心,管理中心,服務發現註冊降級熔斷等功能。它相比於Eureka功能更加齊全,代碼耦合更低,性能更優異,且更易於分佈式,高可用
二. 快速搭建Nacos平臺(Linux版本)
2.1 下載nacos文件
- 方案一:
wget https://github.com/alibaba/nacos/releases/download/1.2.0/nacos-server-1.2.0.tar.gz
- 到官網下載,地址爲:官網
官網下載後,上傳至root目錄下,可選擇最新或最穩定版本
2.2 安裝
- 下載: 參照2.1
- 解壓:
tar -zxvf xxxxx.tar.gz
xxxx.tar.gz替換爲自己實際版本的文件
- 設置登錄驗證(可跳過)
- application.properties中nacos.core.auth.enabled修改爲true
- 如圖所示:
- 進入nacos的bin目錄
- 命令如示:
cd nacos/bin/
- 如圖所示:
- 命令如示:
- 執行運行命令:
sh startup.sh -m standalone
執行startup.sh 啓動 standalone表示是以單例啓動,非集羣模式;
- 檢查是否成功啓動:
- 命令所示:
netstat -lnp | grep 8848
- 如圖所示:
> 如果沒有顯示出任何內容,說明未啓動成功,可檢查哪些細節漏了;
- 命令所示:
- 其他要說明的事項:
- 如果啓動成功後依舊無法訪問,請檢查以下事項:
- 防火牆是否開啓,若防火牆開啓狀態,則查看防火牆是否開放了8848端口,若未開放則開放端口;常用Linux防火牆相關命令請跳轉: Linux常用命令
- 本機是否能連接到服務器,若不能ping通說明無法連接至服務器,請檢查網絡;
- 若需要關閉,可使用關閉命令:
sh shutdown.sh
- 如果啓動成功後依舊無法訪問,請檢查以下事項:
2.3 訪問
- 訪問地址: http://127.0.0.1:8848/nacos
遠程訪問則將ip替換爲服務器的實際ip即可
- 出現登錄界面則說明啓動成功:
- 如圖所示:
- 登錄及密碼默認都是:
nacos
- 如圖所示:
2.4 配置數據庫(選配)
- nacos數據庫默認有一個自己的嵌入式數據庫,我們可以將其數據庫替換爲mysql數據庫,這樣我們可以直接在數據庫中方便的配置一些配置了;
- 操作如下:
- 進入nacos/conf目錄
cd ~/nacos/conf
- 編輯 application.properties
- 將以下內容取消註釋,並在user,password配置自己的mysql賬號密碼,在db.url.0後面配置自己的mysql地址:
- 在自己的mysql上,新建一個nacos_config數據庫,並執行如圖的sql文件,創建nacos支持的表,如圖所示:
- 然後可以參考 章節 2.3 進行啓動;
- 將以下內容取消註釋,並在user,password配置自己的mysql賬號密碼,在db.url.0後面配置自己的mysql地址:
- 進入nacos/conf目錄
三. 微服務代碼配置
3.1 引入依賴:
- Gradle項目:
compile group: 'com.alibaba.cloud', name: 'spring-cloud-starter-alibaba-nacos-discovery', version: '2.1.0.RELEASE'
- Maven項目:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
gradle也可以引入config,版本號需要的話可以實際去選擇合適的版本
3.2 啓動類
- 啓動類上加上
@EnableDiscoveryClient
註解 - 如圖所示:
3.3 配置類
- 代碼如下:
spring: cloud: nacos: discovery: server-addr: nacos的ip地址:8848
- 如圖所示:
四. 將Eureka項目遷移至Nacos
4.1 移除依賴
- 將gradle或Maven的依賴配置,包含eureka的依賴刪除
4.2 移除配置
- 將application.yml或者其他配置文件中,將eureka的註冊相關配置刪除
4.3 移除註解
- 將啓動類中包含
@EnableEurekaClient
的註解刪除
4.4 移除Eureka服務
- 將Eureka服務刪除
4.5 引入Nacos相關配置
- 參照章節三,引入即可
4.6 檢查遷移是否成功
- 啓動服務,登錄nacos管理系統,查詢服務是否註冊上,若能註冊上,則說明遷移成功