概述
背景
Nacos GitHub原始碼地址 https://github.com/alibaba/nacos ,目前原始碼基于高性能RPC的2.1.0,和基于HTTP RESTFUL的1.4.3版本的兩條分支,因此2.X系列Nacos性能比1.X版本至少提升2倍以上,我們這邊下載研究的是2.1.0版本的原始碼,
Nacos 官網地址 https://nacos.io/zh-cn/docs
Spring-Cloud-Alibaba GitHub原始碼地址
前面的《主流微服務一站式解決方案Spring Cloud Alibaba入門看這篇就足夠了-開篇》我們已經簡單介紹Spring Cloud Alibaba一站式解決方案的入門,對Spring Cloud Alibaba有了基本認識,開發人員可以通過 Spring Cloud 編程模型輕松使用其生態組件來來開發分布式應用服務,而這程序只需添加一些注解和少量配置就可以將 Spring Cloud 應用接入阿里的分布式應用解決方案,最終通過阿里中間件來迅速搭建分布式應用系統,此外阿里云同時還提供了 Spring Cloud Alibaba 企業版 微服務解決方案(包括無侵入服務治理全鏈路灰度,無損上下線,離群實體摘除等,企業級 Nacos 注冊配置中心和企業級云原生網關等眾多產品),分布式功能更加強大完善,有興趣的伙伴可以自行前往了解,
Nacos官網提供Nacos2.0.0-ALPHA2 服務發現性能測驗報告,其他的如1.0和2.0配置模塊壓測報告,1.0服務發現模塊的壓測報告等都可以去詳細查閱官網


定義
Nacos 是構建以“服務”為中心的現代應用架構 (例如微服務范式、云原生范式) 的服務基礎設施,致力于發現、配置和管理微服務,可以快速實作動態服務發現、服務配置、服務元資料及流量管理,簡單來說就是集注冊中心和配置中心于一體,幾乎支持所有市面同型別產品的所有功能,Nacos 支持主流的服務生態包括Kubernetes Service、gRPC|Dubbo RPC Service 或者 Spring Cloud RESTful,可以說是目前國內最主流、最強大、性能最好的注冊中心和配置中心的選型,下面為Nacos與其他同型別產品的對比

關鍵特性
- 服務發現和服務運行狀況檢查
- Nacos 支持基于 DNS 和基于 RPC 的服務發現,服務提供者可使用 原生SDK、OpenAPI、或一個獨立的Agent TODO注冊 Service 后,服務消費者可以使用DNS TODO 或HTTP&API查找和發現服務,
- Nacos 提供對服務的實時的健康檢查,阻止向不健康的主機或服務實體發送請求,Nacos 支持傳輸層 (PING 或 TCP)和應用層 (如 HTTP、MySQL、用戶自定義)的健康檢查, 對于復雜的云環境和網路拓撲環境中(如 VPC、邊緣網路等)服務的健康檢查,Nacos 提供了 agent 上報模式和服務端主動檢測2種健康檢查模式,Nacos 還提供了統一的健康檢查儀表盤,幫助您根據健康狀態管理服務的可用性及流量,
- 動態配置管理
- 動態配置服務允許在所有環境中以集中式和動態的方式管理所有服務的配置,當更新配置時應用從配置中心讀取配置并使得配置更改操作更加敏捷與高效,
- 配置中心化管理讓實作無狀態服務變得更簡單,讓服務按需彈性擴展變得更容易,
- Nacos 提供了一個簡潔易用的UI (控制臺樣例 Demo) 幫助您管理所有的服務和應用的配置,Nacos 還提供包括配置版本跟蹤、金絲雀發布、一鍵回滾配置以及客戶端配置更新狀態跟蹤在內的一系列開箱即用的配置管理特性,幫助您更安全地在生產環境中管理配置變更和降低配置變更帶來的風險,
- 動態DNS服務
- Nacos支持權重路由,讓您更容易地實作中間層負載均衡、更靈活的路由策略、流量控制以及資料中心內網的簡單DNS決議服務,動態DNS服務還能讓您更容易地實作以 DNS 協議為基礎的服務發現,以幫助您消除耦合到廠商私有服務發現 API 上的風險,
- Nacos 提供了一些簡單的 DNS APIs TODO 幫助您管理服務的關聯域名和可用的 IP:PORT 串列,
- 服務和元資料管理
- Nacos提供從微服務平臺建設的視角管理資料中心的所有服務及元資料,包括管理服務的描述、生命周期、服務的靜態依賴分析、服務的健康狀態、服務的流量管理、路由及安全策略、服務的 SLA 以及最首要的 metrics 統計資料,
- 其他特性可以查閱官網及其的路線圖規劃說明,
核心概念
- 命名空間:用于進行租戶粒度的配置隔離,不同的命名空間下,可以存在相同的 Group 或 Data ID 的配置,Namespace 的常用場景之一是不同環境的配置的區分隔離,例如開發測驗環境和生產環境的資源(如配置、服務)隔離等,
- 配置管理:系統中所有配置的編輯、存盤、分發、變更管理、歷史版本管理、變更審計等所有與配置相關的活動統稱為配置管理,
- 配置項:一個具體的可配置的引數與其值域,通常以 param-key=param-value 的形式存在,例如我們常配置系統的日志輸出級別(logLevel=INFO|WARN|ERROR) 就是一個配置項,
- 配置集:一組相關或者不相關的配置項的集合稱為配置集,在系統中,一個組態檔通常就是一個配置集,包含了系統各個方面的配置,例如,一個配置集可能包含了資料源、執行緒池、日志級別等配置項,配置集 ID 是組織劃分配置的維度之一,Data ID 通常用于組織劃分系統的配置集,
- 配置分組:Nacos 中的一組配置集,是組織配置的維度之一,通過一個有意義的字串(如 Buy 或 Trade )對配置集進行分組,從而區分 Data ID 相同的配置集,
- 配置快照:Nacos 的客戶端 SDK 會在本地生成配置的快照,當客戶端無法連接到 Nacos Server 時,可以使用配置快照繼續運行有一定的整體容災保障能力,配置快照類似于快取,會在適當的時機更新但沒有快取過期(expiration)的概念,
- 服務:通過預定義介面網路訪問的提供給客戶端的軟體功能,其目的是不同的客戶端可以為不同的目的重用(例如通過跨行程的網路呼叫),服務名則為服務提供的標識,通過該標識可以唯一確定其指代的服務,
- 服務注冊中心:存盤服務實體和服務負載均衡策略的資料庫,
- 服務發現:在計算機網路上,(通常使用服務名)對服務下的實體的地址和元資料進行探測,并以預先定義的介面提供給客戶端進行查詢,
- 元資訊:Nacos資料(如配置和服務)描述資訊,如服務版本、權重、容災策略、負載均衡策略、鑒權配置、各種自定義標簽 (label),從作用范圍來看,分為服務級別的元資訊、集群的元資訊及實體的元資訊,
- 服務分組:不同的服務可以歸類到同一分組,
- 虛擬集群:同一個服務下的所有服務實體組成一個默認集群, 集群可以被進一步按需求劃分,劃分的單位可以是虛擬集群,
- 實體:提供一個或多個服務的具有可訪問網路地址(IP:Port)的行程,
- 權重:實體級別的配置,權重為浮點數,權重越大,分配給該實體的流量越大,
- 健康檢查:以指定方式檢查服務下掛載的實體 (Instance) 的健康度,從而確認該實體 (Instance) 是否能提供服務,根據檢查結果,實體 (Instance) 會被判斷為健康或不健康,對服務發起決議請求時,不健康的實體 (Instance) 不會回傳給客戶端,
- 健康保護閾值:為了防止因過多實體 (Instance) 不健康導致流量全部流向健康實體 (Instance) ,繼而造成流量壓力把健康實體 (Instance) 壓垮并形成雪崩效應,應將健康保護閾值定義為一個 0 到 1 之間的浮點數,當域名健康實體數 (Instance) 占總服務實體數 (Instance) 的比例小于該值時,無論實體 (Instance) 是否健康,都會將這個實體 (Instance) 回傳給客戶端,這樣做雖然損失了一部分流量,但是保證了集群中剩余健康實體 (Instance) 能正常作業,不過我們在實際專案中通常在微服務網關通過使用Sentinel來做限流、熔斷、降級來保證不會出現系統雪崩,因此健康保護閾值這個功能就不太重要了,
架構

- 服務提供方 (Service Provider):是指提供可復用和可呼叫服務的應用方,
- 服務消費方 (Service Consumer):是指會發起對某個服務呼叫的應用方,
- 名字服務 (Naming Service):提供分布式系統中所有物件(Object)、物體(Entity)的“名字”到關聯的元資料之間的映射管理服務,例如 ServiceName -> Endpoints Info, Distributed Lock Name -> Lock Owner/Status Info, DNS Domain Name -> IP List, 服務發現和 DNS 就是名字服務的2大場景,
邏輯架構

- 服務管理:實作服務CRUD,域名CRUD,服務健康狀態檢查,服務權重管理等功能,
- 配置管理:實作配置CRUD,版本管理,灰度管理,監聽管理,推送軌跡,聚合資料等功能,
- 元資料管理:提供元資料CURD 和打標能力,
- 插件機制:實作三個模塊可分可合能力,實作擴展點SPI機制,
- 事件機制:實作異步化事件通知,sdk資料變化異步通知等邏輯,
- 一致性協議:解決不同資料,不同一致性要求情況下,不同一致性機制,
- 存盤模塊:解決資料持久化、非持久化存盤,解決資料分片問題,
- 快取機制:容災目錄,本地快取,server快取機制,容災目錄使用需要工具,
- 啟動模式:按照單機模式,配置模式,服務模式,dns模式,或者all模式,啟動不同的程式+UI,
- Metrics:暴露標準metrics資料,方便與三方監控系統打通,
- OpenAPI:暴露標準Rest風格HTTP介面,簡單易用,方便多語言集成,
- Console:易用控制臺,做服務管理、配置管理等操作,
- 其他詳細查看官網,
領域模型
- 資料模型
Nacos 資料模型 Key 由三元組唯一確定, Namespace默認是空串,公共命名空間(public),分組默認是 DEFAULT_GROUP,命名空間 》組 》Service/DataId.
- 服務領域模型

如果有鑒權和配置加密的需求官方也提供相關插件支持,
部署與配置
部署
官方提供多種部署方式,包括下載二進制檔案部署、基于Docker和K8S部署,我們這里選擇Docker-Compose方式部署
-
克隆專案
git clone --depth 1 https://github.com/nacos-group/nacos-docker.git cd nacos-docker #目前版本為2.0.4,可以編輯vi example/.env進行修改 NACOS_VERSION=v2.0.4 -
Standalone Mysql
# Using mysql 5.7 也可以選擇 mysql 8 docker-compose -f example/standalone-mysql-5.7.yaml up -d

- 部署完成后通過暴露的8848訪問Nacos的Web控制臺地址http://192.168.50.95:8848/nacos,默認用戶名密碼為nacos/nacos

配置
創建命名空間simple_ecommerce(簡單電商網站),提交后默認生成命名空間ID為a2b1a5b7-d0bc-48e8-ab65-04695e61db01

創建用戶itxs,密碼為itxs123

用戶itxs系結CONFIG_MANAGER(配置管理員角色)

為角色CONFIG_MANAGER添加命名空間資源和可讀寫的操作權限

實戰
基本介紹
Nacos官方基于Java技術堆疊提供多種開發使用的方式,包括基于原生Java、Spring整合、SpringBoot整合、Spring Cloud整合、Dubbo整合等,我們本篇主要是以Spring Cloud Alibaba整合代碼開發方式來做示例為主,基于Spring Cloud Alibaba使用方式如果用于生產環境,建議使用對應的官網版本說明,詳細可以查看Spring Cloud Alibaba Wiki
組件版本關系:每個 Spring Cloud Alibaba 版本及其自身所適配的各組件對應版本(經過驗證,自行搭配各組件版本不保證可用)如下表所示(最新版本用*標記):

下表為按時間順序發布的 Spring Cloud Alibaba 以及對應的適配 Spring Cloud 和 Spring Boot 版本關系(由于 Spring Cloud 版本命名有調整,所以對應的 Spring Cloud Alibaba 版本號也做了對應變化)

我們這里不是生產環境,用于開發測驗學習的話可以選擇最新也即是向下兼容的思想,因此Nacos還是使用上面的2.0.4,踩坑了再來解決還能更深刻理解原理,
簡單電商示例專案框架搭建
目錄規劃
- ecom-doc:詳細檔案目錄
- ecom-scripts:腳本存盤目錄,例如MySQL、Hive資料庫腳本等,
- ecom-bom:bom模塊,控制整體版本;依賴包版本管理,管理所有第三方jar包版本,比如mysql-connector-java的版本,其他模塊不需要配置版本,到時修改版本可以統一管理,而Spring Cloud Alibaba 版本由主Pom控制,
- ecom-commons:公共服務模塊,也可先再拆細子專案,如領域物體entity、Service、Mapper等,
- ecom-component: 自定義組件,包含自定義的spring boot starter,暫時預留,
- ecom-mbg:代碼自動生成工具,使用mybatis-plus-generator,
- ecom-gateway:電商網站網關服務模塊,
- ecom-storage:電商網站庫存服務模塊,
- ecom-account:電商網站用戶服務模塊,
- ecom-order:電商網站訂單服務模塊,
- ecom-kubernetes-helm: kubernetes-helm編排腳本目錄
- ecom-kubernetes: kubernetes原生編排腳本目錄
- ecom-docker:docker compose編排腳本目錄
示例資料庫
本示例采用MySQL資料庫,以docker方式部署MySQL 8.0.28版本
CREATE DATABASE IF NOT EXISTS storage
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_chinese_ci;
DROP TABLE IF EXISTS `storage_tbl`;
CREATE TABLE `storage_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE KEY (`commodity_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE DATABASE IF NOT EXISTS order
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_chinese_ci;
DROP TABLE IF EXISTS `order_tbl`;
CREATE TABLE `order_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`commodity_code` varchar(255) DEFAULT NULL,
`count` int(11) DEFAULT 0,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE DATABASE IF NOT EXISTS account
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_chinese_ci;
DROP TABLE IF EXISTS `account_tbl`;
CREATE TABLE `account_tbl` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` varchar(255) DEFAULT NULL,
`money` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Maven專案主框架搭建
創建工程主Pom檔案,目前在主工程業務服務模塊先只增加庫存微服務,后續再逐步增加其他微服務
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itxs</groupId>
<artifactId>simple_ecommerce</artifactId>
<version>1.0</version>
<modules>
<module>ecom_bom</module>
<module>ecom_commons</module>
<module>ecom_storage</module>
</modules>
<name>simple_ecommerce</name>
<packaging>pom</packaging>
<description>a simple electronic commerce platform demo tutorial</description>
<properties>
<java.verson>1.8</java.verson>
<encoding>UTF-8</encoding>
<spring-boot.version>2.6.4</spring-boot.version>
<spring.cloud.verison>2021.0.1</spring.cloud.verison>
<spring.cloud.alibaba.verison>2021.0.1.0</spring.cloud.alibaba.verison>
<ecom.bom.version>1.0</ecom.bom.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<!--統一專案整體第三方依賴版本-->
<dependency>
<groupId>cn.itxs</groupId>
<artifactId>ecom_bom</artifactId>
<version>${ecom.bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--統一版本spring-boot、spring-cloud、spring.cloud.alibaba-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.verison}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.verison}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
管理第三方依賴Bom的Pom檔案
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.itxs</groupId>
<artifactId>ecom_bom</artifactId>
<name>ecom_bom</name>
<packaging>pom</packaging>
<version>1.0</version>
<description>manage third-party package versions</description>
<properties>
<ecom.commons.version>1.0</ecom.commons.version>
<seata-spring-boot.version>1.4.2</seata-spring-boot.version>
<mysql.version>8.0.28</mysql.version>
<druid.version>1.2.8</druid.version>
<mybatis-plus.version>3.5.1</mybatis-plus.version>
<lombok.version>1.18.22</lombok.version>
<hutool-all.verison>5.7.22</hutool-all.verison>
<apm-toolkit-trace.version>8.7.0</apm-toolkit-trace.version>
<jetcache.redis.version>2.6.2</jetcache.redis.version>
<fastjson.version>1.2.80</fastjson.version>
<mybatis-plus-generator.version>3.5.2</mybatis-plus-generator.version>
<velocity.version>2.3</velocity.version>
</properties>
<dependencyManagement>
<dependencies>
<!--ecom-commons 版本-->
<dependency>
<groupId>cn.itxs</groupId>
<artifactId>ecom_commons</artifactId>
<version>${ecom.commons.version}</version>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>${seata-spring-boot.version}</version>
</dependency>
<!--database-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool-all.verison}</version>
</dependency>
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>${apm-toolkit-trace.version}</version>
</dependency>
<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis</artifactId>
<version>${jetcache.redis.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatis-plus-generator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>${velocity.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
公共commons模塊的Pom檔案,包含Spring Cloud Alibaba常見組件的客戶端依賴而不僅僅是本篇的Nacos客戶端,后續如增加再逐步補充
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>simple_ecommerce</artifactId>
<groupId>cn.itxs</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ecom_commons</artifactId>
<name>ecom_commons</name>
<packaging>jar</packaging>
<description>a commons module</description>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--undertow 性能比tomcat稍高-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
創建庫存微服務模塊,其Pom檔案內容如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>simple_ecommerce</artifactId>
<groupId>cn.itxs</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ecom_storage</artifactId>
<packaging>jar</packaging>
<version>1.0</version>
<name>ecom_storage</name>
<description>a simple electronic commerce platform demo tutorial for storage service</description>
<dependencies>
<dependency>
<groupId>cn.itxs</groupId>
<artifactId>ecom_commons</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 指定該Main Class為全域的唯一入口 -->
<mainClass>com.aotain.cu.underly.infra.xx1.Xx1ServiceApplication</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal><!--可以把依賴的包都打包到生成的Jar包中-->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
并創建庫存微服務SpringBoot啟動類和bootstrap.yml,至此大體工程框架雛形已具備

計劃是每個微服務本地bootstrap.yml里只需配置Nacos配置中心的地址,其他配置項全部放在配置中心里管理,因此我們先從Nacos配置中心開始,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457590.html
標籤:Java
