1.為什麼使用選擇nacos
nacos在springcloud體系中作為注冊中心與配置中心使用。相當于eureka與apollo的功能。
一個老生常談的問題nacos和eureka差別,下圖是樓主在網上查找到。
但是在樓主實際應用中 還有以下有點特别稱道:
- nacos有配置功能,相對于樓主之前的eureka+apollo 這無疑大大的簡化了系統的複雜性。
- nacos使用了資料庫進行管理資料,使在處理資料時心裡更舒服了。
- nacos擁有namespace和gourp的概念,可以隔離同名的服務。這樣在多人起後端服務時,可以注冊到一個nacos服務 隔離開就可以了。
2.Nacos快速開始
這個快速開始手冊是幫忙您快速在您的電腦上,下載下傳、安裝并使用 Nacos。
1.版本選擇
您可以在Nacos的
release notes及
部落格中找到每個版本支援的功能的介紹,目前推薦的穩定版本為1.4.2或2.0.1。
2.預備環境準備
Nacos 依賴
Java環境來運作。如果您是從代碼開始建構并運作Nacos,還需要為此配置
Maven環境,請確定是在以下版本環境中安裝使用:
3.下載下傳源碼或者安裝包
你可以通過源碼和發行包兩種方式來擷取 Nacos。
1.從 Github 上下載下傳源碼方式
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
2.下載下傳編譯後壓縮包方式
您可以從
最新穩定版本nacos-server-$version.zip
包。
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
cd nacos/bin
4.啟動伺服器
1.Linux/Unix/Mac
啟動指令(standalone代表着單機模式運作,非叢集模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系統,或者運作腳本報錯提示[[符号找不到,可嘗試如下運作:
bash startup.sh -m standalone
2.Windows
startup.cmd -m standalone
當idea使用源碼單機啟動時需要以下配置
-Dnacos.standalone=true
5.單機時使用資料庫
當不添加配置時,預設是使用記憶體儲存資訊,我們可以添加資料庫配置,使資料儲存在資料庫内.
暫時官方隻支援mysql,其他資料庫需要自己手動修改。
1.源碼啟動
使用源碼idea啟動需要修改以下檔案的以下位置
2.已經打包的jar包
nacos\conf\application.properties修改資料庫配置
6.啟動成功
出現以下圖案代表啟動成功,看出來模式為單機模式,路徑為Console輸出,通路即可
對于官網叢集搭建的要求,是要求大企業的,個人認為小公司如果沒有條件可以不必滿足,也可以正常啟動。但是有條件還是建議上叢集。
3.springboot注冊進入nacos
1.修改pom檔案
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在pom.xml檔案中最好選擇合理的版本,否則會報各種各樣的錯 。
版本可以根據官方文檔選擇:
https://github.com/alibaba/spring-cloud-alibaba/wiki/版本說明同時為了保證版本相同建議再父工程中加入以下配置,意思是子工程groupid為org.springframework.cloud,com.alibaba.cloud,org.springframework.boot的都依賴父工程版本
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<!--maven不支援多繼承,使用import來依賴管理配置-->
<scope>import</scope>
</dependency>
<!-- SpringCloud Alibaba 微服務 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringBoot 依賴配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.修改bootstrap.xml
這裡一定要使用bootstrap.yml而不是application.yml,因為bootstrap.yml運作先于後者,如果使用application.yml可能會出現即使有注冊的位址,還是去連接配接localhost:8848的情況。
spring:
application:
name: systemp
# 資料源配置
cloud:
nacos:
discovery:
# 服務注冊位址
server-addr: 192.168.xx.x:8848
#命名空間
namespace: b80f0aa4-3af2-a6e3-c6fda24c2bc0
#分組
group: xxx
config:
# 配置中心位址
server-addr: 192.168.xx.xx:8848
# 配置檔案格式
file-extension: yml
#命名空間
namespace: b80f0aa4-3af2-a6e3-c6fda24c2bc0
#分組
group: xxx
可以為服務指定namespace和group,在一個namespace和group中的服務隻能擷取同namespace和group中的服務,這樣可以同時配置dev和pro環境。擷取小組内的小夥伴都可以連接配接一個nacos服務,而不是像eureka 一人啟動一個。
1.建立命名空間
配置檔案中namespace是需要建立的,方式如圖。
配置檔案中是命名空間id
2.建立分組
分組不用在nacos中建立 ,直接編寫即可。
3.修改啟動類
在spring boot啟動類上加入@EnableDiscoveryClient注解即可。
@EnableDiscoveryClient
@SpringBootApplication
public class GetwayApplication {
public static void main(String[] args) {
//去除nacos日志
System.setProperty("nacos.logging.default.config.enabled", "false");
SpringApplication.run(GetwayApplication.class, args);
}
}
注意:如果使用了logback作為日志 System.setProperty("nacos.logging.default.config.enabled", "false");
需要添加 否則會因為日志命名報錯
4.啟動
然後啟動服務,通路ip:8848/nacos可以驗證是否注冊成功。
同時也釋出到了指定的namespace和groupid。
4.配置中心
配置中心:bootstrap.yml中的配置可以通過nacos配置修改,同時大部門不需要重新開機服務就可以生效。
由于引入了nacos,樓主不再使用apollo配置中心。變更原因如下
- 由于架構變更為springcloud alibaba,nacos可以承擔起eureka+apollo的功能。
- 可以降低系統的複雜性。友善運維。
- 對配置中心的需求僅有動态配置,無更細膩話的權限和灰階釋出等功能要求。
1.實戰整合springboot
建議啟動類使用bootstrap.yml
1.建立nacos配置
請注意選擇合适命名空間
配置解釋如下:
- Data ID的命名格式如下:{spring.application.name}-{spring.profiles.active}.{檔案類型},也就是系統名稱+dev/pro.yaml(一般情況)見下圖。
如果沒有spring.profiles.active會省略“-”與“spring.profiles.active”
- group:其中需要注意namespace與group需要與nacos中配置對應(這兩個概念上文有介紹),否則會擷取不到配置。
- 配置格式:這裡因為使用了bootstrap.yml是以選擇上述配置。
- 配置内容:需要在nacos中更改的配置項。
2.配置成功
如果成功:
切記namespace與group一定要比對。
同時可以監控到那台服務使用該配置。
3.用戶端接口編寫
@RestController
@RefreshScope
public class DemoController {
@Value("${nacostest.demo}")
private String demo;
@GetMapping("/testConfig")
public String testConfig() {
return demo;
}
}
@RefreshScope不要少寫!否則報錯!
改變配置多次調用接口,可以發現傳回值發生變化。