Nacos的官網對這一問題進行了詳細的介紹,通俗的來講:html
Nacos是一個服務發現組件,同時也是一個配置服務器,它解決了兩個問題:java
1.服務A如何發現服務Bgit
2.管理微服務的配置github
Nacos依靠java環境運行,搭建Nacos Server,須要配置maven環境,版本環境要求以下:web
一、64 bit OS,支持 Linux/Unix/Mac/Windows,推薦選用 Linux/Unix/Mac
二、64 bit JDK 1.8+
三、Maven 3.2.x+spring
Nacos提供了兩種方式獲取Nacos的服務端:ubuntu
一、源碼下載編譯瀏覽器
二、下載 Release 包bash
在你須要安裝的地址下,執行:git clone https://github.com/alibaba/nacos.git服務器
將源碼下載到本地以後,進入源碼目錄:cd nacos
執行命令:mvn -Prelease-nacos clean install -U
進入啓動命令:cd distribution/target/nacos-server-1.1.3/nacos/bin/
從這個網址下載nacos-server-$version.zip 包,執行解壓縮命令:unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
進入命令執行頁面: cd nacos/bin
Lunix系統:
啓動命令(standalone表明着單機模式運行,非集羣模式):
sh startup.sh -m standalone
若是您使用的是ubuntu系統,或者運行腳本報錯提示[[符號找不到,可嘗試以下運行:
bash startup.sh -m standalone
Windows系統:
啓動命令:
cmd startup.cmd
或者雙擊startup.cmd運行文件
啓動成功後
打開瀏覽器輸入:http://127.0.0.1:8848/nacos,進入nacos可視化控制頁面,帳號密碼默認nacos。
首先,在加依賴,在dependencies中添加
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
而後,修改配置(server-addr不要加http或者https前綴,直接主機名/IP/域名 + 端口號就能夠了)
spring: cloud: nacos: discovery: # 指定nacos server地址 server-addr: localhost:8848 application: name: study01
啓動服務,打開Nacos Server控制檯,能夠看見剛剛啓動的服務已經註冊成功。
PS:對於Nacos Server版本與Nacos Client版本對應問題:
應用集成Nacos Client從而和Nacos Server通訊,咱們經過查看spring-cloud-alibaba-dependencies文件中使用了哪一個Nacos Client版本,下載相同版本的Nacos Server版本便可。
能夠看見我當前版本的Spring Cloud Alibaba使用的Nacos Client版本爲1.1.1,因爲Nacos沒有提供Nacos server1.1.1版本包,因此我直接使用了Nacos server1.1.3。
如何在服務A中調用服務B的請求,分爲兩步進行:
1.獲取服務B的URL,由於考慮到服務B可能部署在多個服務器,或者更換升級服務器,因此不可以直接寫死URL,咱們利用DiscoveryClient接口動態的獲取服務B的URL
import org.springframework.cloud.client.discovery.DiscoveryClient; private final DiscoveryClient discoveryClient; // 服務B全部示例的信息 List<ServiceInstance> instances = discoveryClient.getInstances("服務B"); String targetURL = instances.stream() .map(instance -> instance.getUri().toString() + "/***/***") .findFirst() .orElseThrow(() -> new IllegalArgumentException("當前示例不存在"));
2.調用服務B的請求,咱們使用RestTemplate接口完成這一操做
import org.springframework.web.client.RestTemplate; private final RestTemplate restTemplate; Demo forObject = restTemplate.getForObject(targetURL, Demo.class, "請求參數");
關於領域模型,能夠經過上圖來理解:
最大的是Namespace(命名空間),Nacos默認的命名空間是public,Namespace主要用來實現隔離。比方說咱們如今有三個環境:開發、測試、生產環境,咱們就能夠建立三個Namespace,不一樣的Namespace之間是隔離的。
Namespace之下是Group(分組),Nacos默認Group是DEFAULT_GROUP,Group能夠把不一樣的微服務劃分到同一個分組裏面去,Group能夠方便咱們的管理。
Group之下是Service,就是咱們所謂的微服務;一個Service能夠包含多個Cluster(集羣),Nacos默認Cluster是DEFAULT,Cluster是對指定微服務的一個虛擬劃分,比方說爲了容災,將Service微服務分別部署在了杭州機房和廣州機房,這時就能夠給杭州機房的Service微服務起一個集羣名稱(HZ),給廣州機房的Service微服務起一個集羣名稱(GZ),還能夠儘可能讓同一個機房的微服務互相調用,以提高性能。最後是Instance,就是微服務的示例。
首先在控制檯新建一個命名空間
建立成功以後獲得了一個UUID,將此UUID配置在配置文件中(必定要配置UUID,而不是命名空間名稱),同時配置集羣名稱:
spring: cloud: nacos: discovery: # 指定nacos server地址 server-addr: localhost:8848 namespace: ab9783a7-dade-4da3-9abf-5cb2f5c52d59 cluster-name: HZ
能夠在控制檯查看到,多出了一個dev命名空間
服務中也多出了一個HZ集羣
Nacos數據(如配置和服務)描述信息,如服務版本、權重、容災策略、負載均衡策略、鑑權配置、各類自定義標籤 (label),從做用範圍來看,分爲服務級別的元信息、集羣的元信息及實例的元信息。
一、提供描述信息
二、讓微服務的調用更加靈活
微服務版本控制
一、控制檯設置(key-value形式)
二、配置文件配置
spring: cloud: nacos: discovery: # 元數據 metadata: target-version: v1