近幾年微服務很火,Spring Cloud提供了為服務領域的一整套解決方案。其中Spring Cloud Alibaba是我們SpringCloud的一個子項目,是提供微服務開發的一站式解決方案。
包含微服務開發的必要組件,基於SpringCloud 符合SpringCloud標准,是阿里的微服務的解決方案。
文檔:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
Nacos的安裝與啟動
Nacos是其中一個組件。是阿里開源的可用於注冊中心和配置中心的開源組建。
下載安裝也比較簡單,只需要下載一個壓縮包即可,下載地址:https://github.com/alibaba/nacos/releases。
解壓即可用,windows和了linux都適用。
我的是windows,然后下載的是nacos-server-1.1.4.zip,選擇一個目錄解壓的到如下文件。
只需要切換到bin目錄下,雙擊startup.cmd,就會看到打開了一個cmd窗口
等待一會,以下這樣就是啟動好了
然后,瀏覽器訪問,http://localhost:8848/nacos 打開他的控制台,用戶名密碼都是nacos,然后進來就是這樣,就啟動好了。
是不是簡單。
注冊服務到Nacos
然后我們可以寫一個服務去注冊到nacos上,創建SpringBoot的項目。創建好之后按以下步驟把Nacos引入到我們的項目中。
第一:引入Nacos客戶端的依賴
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId> </dependency>
第二:配置Nacos的地址
spring: application: name: order-center cloud: nacos: discovery: server-addr: localhost:8088
第三:啟動項目,觀察Nacos服務列表。成功注冊。
Nacos集群啟動
剛才是在Nacos單機的情況下完成的操作,實際情況下作為注冊中心都是要集群部署保證高可用的。我們就來看一下Nacos集群模式如何配置並啟動的。
我們就弄三個實例,
第一:把我們解壓的Nacos的包復制三個,如下圖:
第二:進入到各自的conf目錄下打開application.properties文件,一次修改為 server.port=8849/8850/8851三個端口,然后添加如下配置,保存。(記得三個包都要改)
spring.datasource.platform=mysql # 數據庫實例數量 db.num=1 #自己數據庫的連接信息 db.url.0=jdbc:mysql://localhost:3306/nacos_test?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=你的數據庫密碼
第三:在conf目錄下找到nacos-mysql.sql 這個SQL腳本,在你的mysql里新建一個數據量,名字你自己定,然后執行這個SQL。(數據庫名字要和你配置里寫的一致)
第四:在conf目錄下找到 cluster.conf.example 文件,命名為 cluster.conf 然后打開填入三個 Nacos的IP和端口。(記得改為你自己的IP和端口)
這里一定要寫真實的IP,不能寫localhost,127.0.0.1,不然集群啟動會找不到別的實例,導致無法選舉出leader
192.168.0.107:8849 192.168.0.107:8850 192.168.0.107:8851
注意:三個實例的以上配置都要改。改完之后就可以去啟動了。
第五:啟動。這個時候啟動要注意了,不能直接雙擊startuo.cmd了。
博主就是因為在集群模式下依然使用雙擊的啟動方式,導致一直是起了三個單機模式的實例,最后找了很久才發現是因為這個啟動腳本默認是單機啟動的,集群啟動需要加參數指定,而Linux的啟動腳本正好相反,默認是集群模式,單機啟動需要加參數-m standalone。
集群模式下啟動需要打開CMD窗口,打開三個,進入到各自的bin目錄下,分別執行,startup.smd -m cluster,然后等待一會,即可看到以cluster模式啟動的字眼
然后訪問這三台Nacos,點擊節點列表就可以看到三個Nacos實例 誰是Leader 誰是follower一清二楚。
集群下客戶端怎么連?
第一種:可以在剛才單機的基礎上加多個IP和端口中間用逗號隔開
第二種:配合Nginx代理我們的Nacos的集群,配置里就直接寫Nginx的IP和端口即可
Nginx配置如下:
upstream nacos_server{ server 192.168.0.107:8849; server 192.168.0.107:8850; server 192.168.0.107:8851; } server { listen 8088; server_name localhost; location /nacos/ { proxy_set_header Host $http_host; proxy_pass http://nacos_server/nacos/; } }
而我們訪問Nacos的控制台的時候,就可以通過Nginx來訪問了,客戶端注冊到Nacos的時候就可以直接寫Nginx的地址了。
獲取注冊中心注冊的服務的地址列表
我們剛才寫了一個springboot的項目引入了Nacos的客戶端,並成功把服務信息注冊到了Nacos上。現在我們來驗證一下。
寫個Controller,注入RestTemplate 和 DiscoveryClient (Nacos的服務發現客戶端)
@Autowired private DiscoveryClient discoveryClient; @Autowired private RestTemplate restTemplate;
@GetMapping("/getServiceList") public List<ServiceInstance> getServiceList() { List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("order-center"); return serviceInstanceList; }
然后重啟這個服務,瀏覽器訪問 http://localhost:8081/getServiceList
能夠從Nacos拿到我們注冊的服務的信息。
OK,今天就是一個Nacos的一個入門案例,就分享到這里。
總結一下:
1、Nacos同一個程序包同時支持Windows和Linux。
2、支持單機啟動和集群啟動
3、Windows單機啟動直接雙擊 startup.cmd,Linux執行 ./startup.sh -m stanalone
4、配置好集群后,Windows集群啟動CMD窗口下執行 startup.cmd -m cluster,Linux直接執行./startup.sh
5、集群下客戶端可使用多地址逗號隔開的方式,也可使用集群+Nginx的方式,推薦后者。
Nacos還有更加細粒度的注冊中心配置方式,如不同的環境,不同Group,不同的location,不同的版本控制等。
歡迎關注我的公眾號:編程大道,一起交流學習。