目錄
谷粒商城最終的技術搭配方案:
alibaba各元件之間的版本、與SpringBoot的版本對應關系:
搭建Nacos注冊中心
遠端服務調用
搭建Nacos配置中心
Nacos配置中心動态重新整理配置
Nacos命名空間與配置分組
Nacos配置多配置集
搭建gateway網關
谷粒商城最終的技術搭配方案:
SpringCloud Alibaba-Nacos:注冊中心和配置中心
SpringCloud Alibaba-Gateway:API網關
SpringCloud Alibaba-Openfeign:服務之間的調用
SpringCloud Alibaba-Sentinel:服務容錯
SpringCloud Alibaba-Sleuth:調用鍊監控
SpringCloud Alibaba-Seata:分布式事務解決方案
alibaba各元件之間的版本、與SpringBoot的版本對應關系:
版本對應說明位址:版本說明 · alibaba/spring-cloud-alibaba Wiki · GitHub
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI2EzX4xSZz91ZsAzNfRHLGZkRGZkRfJ3bs92YsAjMfVmepNHLR1GT1gUYwVjWywUNrFHT1c3VZVTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxSUhxGatJGbwhFT1Y0Mk9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3QDM5YjYyMDOhNjMxIWN4QTO4QTOiBTZ0YWOhFmN3kzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
服務中使用的boot是2.3.7版本,cloud使用的是Hoxton.SR9,應該要去使用alibaba2.2.7的版本
Nacos下載下傳的位址:Nacos 快速開始
先在Windows作業系統上使用Nacos
點選startup.cmd啟動nacos
通路下面的位址進入它的圖形使用者界面,預設使用者名和密碼都是:nacos
http://localhost:8848/nacos
Nacos使用指南:Spring Cloud Alibaba Reference Documentation
搭建Nacos注冊中心
①在common的pom檔案中導入依賴管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.7.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
②在common的pom檔案中導入nacos的依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
③在yml配置檔案中配置注冊中心的位址和服務名稱
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-product
④在啟動類中添加@EnableDiscoveryClient
遠端服務調用
member服務要調用coupon服務的擷取會員優惠券的方法,需要使用open-feign進行遠端的服務調用
①pom檔案中導入open-feign的依賴,建立服務的時候已經選擇
②建立接口
1)、告訴接口需要調用的服務名
2)、 告訴接口調用服務的那個方法
③啟動open-feign,告訴需要掃描的包
open-feign的執行流程:
①先掃描需要調用服務的包
②擷取服務名到注冊中心找相應的服務,如果存在則調用指定的方法,否則調用失敗
搭建Nacos配置中心
指南:Spring Cloud Alibaba Reference Documentation
①在common的pom檔案中導入Nacos作為配置中心的依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
②建立bootstrap.properties配置檔案,并且配置配置中心的位址和服務名
spring.application.name=gulimall-member
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
谷粒商城之中間件Nacos和Gateway的搭建
Nacos配置中心動态重新整理配置
以前我們擷取配置檔案中的配置項使用下面的方式:
缺陷十分明顯,當我們需要修改配置檔案時,需要重新打包再釋出
解決方案:Nacos動态更新
并沒有動态更新,原因是沒有使用動态更新注解
服務會預設去配置中心找 服務名.properties的配置檔案,如果服務中心配置檔案和配置檔案中的配置檔案有相同的配置項,則預設優先加載配置中心的配置檔案的配置項
Nacos命名空間與配置分組
1.命名空間
作用:配置隔離
說明:Nacos配置中心預設的指令空間是public,釋出的配置檔案預設也是在public指令空間下的
使用一:将命名空間分為開發(dev)、生産(prod)、測試(test),将開發、測試、生産之間配置隔離
使用二:每一個服務一個命名空間,服務之間的配置隔離
出現問題:點選确定之後卡着不動了
出現原因:之前使用過低版本的nacos,需要清空一下浏覽器的緩存
解決方案:
參考文章:https://github.com/alibaba/nacos/issues?q=customNamespaceId
①建立服務的命名空間
② 在bootstrap.properties檔案中配置命名空間
spring.cloud.nacos.config.namespace=47353e14-12d9-420f-b82c-249f760ff794
2.資料集ID(Data Id):類似于檔案名
3.配置分組
說明:配置中心預設分組為:DEFAULT_GROUP
在bootstrap.properties配置檔案中配置命名空間和分組:
spring.application.name=gulimall-member
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=4c819c0a-d055-4bc8-9cbc-dee92aca56d2
spring.cloud.nacos.config.group=test
谷粒商城中的一個服務對應一個命名空間達到服務之間的配置隔離,配置分組來區分開發、測試、生成環境
Nacos配置多配置集
當我們服務越來越複雜,配置項越來越多的時候,我們希望進行一個配置劃分,例如配置資料源一個配置檔案,配置mybatis架構的一個檔案...
建立資料源配置檔案
建立mybatis配置檔案
建立其它配置項配置檔案
spring.application.name=gulimall-member
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=4c819c0a-d055-4bc8-9cbc-dee92aca56d2
#spring.cloud.nacos.config.group=dev
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
#配置動态重新整理
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
#配置動态重新整理
spring.cloud.nacos.config.extension-configs[1].refresh=true
spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
#配置動态重新整理
spring.cloud.nacos.config.extension-configs[2].refresh=true
先加載DEFAULT_GROUP 服務名.properties配置檔案
由于沒有DEFAULT_GROUP下的 服務名.properties配置檔案,是以加載了服務中的配置檔案
然後再去加載擴充的配置檔案
配置檔案生效:
搭建gateway網關
學習文檔:Spring Cloud Gateway
網關的組成:
網關的執行流程:
簡而言之:請求到達網關,網關通過斷言判斷是否符合路由規則,如果符合将請求發送給對應的服務,不過在這之前需要進行過濾的。
routes:是個數組,可以配置多個路由
uri:請求的目的地
predicates:數組,可以配置多個,具體配置可以參考學習文檔
filters: 數組,可以添加多個
添加一個請求頭,X-Request-red對應的值為blue
接下來開始搭建網關并進行簡單的測試:
①使用spring初始化向導建立gateway服務
②導入common依賴,因為gateway需要注冊到nacos中,common中已經有了nacos的依賴
③編寫配置檔案
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-gateway
server:
port: 88
④啟動類中添加開啟服務注冊的注解@EnableDiscoveryClient,由于common中還有資料源的依賴,是以需要排除資料源的依賴
簡單測試:
通路網關,請求路徑攜帶qq或者百度,由網關路由到qq或者百度首頁面
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes:
- id: baidu_route
uri: https://www.baidu.com
predicates:
- Query=url,baidu
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url,qq
application:
name: gulimall-gateway
server:
port: 88