1. 程式人生 > >SpringCloud-Nacos/OpenFien/Gateway的基本介紹及快速上手

SpringCloud-Nacos/OpenFien/Gateway的基本介紹及快速上手

# Spring-Cloud-Alibaba-Nacos 註冊中心 ## 下載、安裝 Nacos 下載地址:[https://github.com/alibaba/nacos/releases](https://github.com/alibaba/nacos/releases) 下載後解壓,開啟 bin 目錄,雙擊 startup.cmd 即可執行,出現錯誤可參考:[https://www.cnblogs.com/songjilong/p/12620021.html](https://www.cnblogs.com/songjilong/p/12620021.html) ## 引入 spring-cloud-alibaba、alibaba-nacos-discovery ```xml com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery com.alibaba.cloud spring-cloud-alibaba-dependencies 2.1.0.RELEASE pom import ``` ## 配置服務名、註冊中心地址 ```yaml spring: application: name: gulimall-coupon # 服務名稱 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 # nacos地址 ``` 4、執行需要註冊的服務、開啟瀏覽器輸入[http://127.0.0.1:8848/nacos](http://127.0.0.1:8848/nacos) ,使用者名稱密碼預設是 nacos,進入後點擊服務列表就可以看到所有註冊的服務了 # Spring-Cloud-OpenFeign 遠端呼叫 ## 引入 openfeign 依賴 ```xml org.springframework.cloud
spring-cloud-starter-openfeign
``` ## 編寫遠端呼叫介面 告訴 SpringCloud 這個介面需要呼叫的遠端服務,**介面方法的請求地址、名稱、返回值要與被呼叫的方法一致** ```java //指定呼叫的遠端服務名 @FeignClient("gulimall-coupon") public interface CouponFeignService { @RequestMapping("/coupon/coupon/member/list") public R memberCoupons(); } ``` ## 開啟遠端呼叫服務 ```java @SpringBootApplication @EnableDiscoveryClient //指定自己建立的遠端介面的位置 @EnableFeignClients(basePackages = "com.sjl.gulimall.member.feign") public class GulimallMemberApplication { public static void main(String[] args) { SpringApplication.run(GulimallMemberApplication.class, args); } } ``` # Spring-Cloud-Alibaba-Nacos 配置中心 ## 引入alibaba-nacos-config ```xml com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
``` ## 新增配置檔案`bootstrap.properties` ```properties # 服務名 spring.application.name=gulimall-coupon # nacos地址 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 ``` ## 開啟動態重新整理 完成上述兩步後,應用會從 Nacos Config 中獲取相應的配置,並新增在 Spring Environment 的 PropertySources 中。要想開啟動態重新整理,還需要在當前類加上 `@RefreshScope` 註解 ```java @RefreshScope //開啟動態重新整理 @RestController @RequestMapping("coupon/coupon") public class CouponController { @Value("${coupon.user.name}") private String name; //coupon.user.name=張三 @Value("${coupon.user.age}") private Integer age; //coupon.user.age=18 @RequestMapping("/test") public R test(){ return R.ok().put("name", name).put("age", age); } } ``` ## 在Nacos新建配置檔案 進入 Nacos 控制檯,新建一個配置檔案,命名為`服務名.properties` ![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200402173242.png) ## 動態的修改配置檔案 當我們將配置檔案的值修改後,訪問的資料也會 更新,如果配置中心和當前應用都配置了相同的項,優先使用配置中心的配置 ![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200402173631.png) # Nacos 配置中心的一些概念與細節 ## 名稱空間 >
用於進行租戶粒度的配置隔離。不同的名稱空間下,可以存在相同的 Group 或 DataID 的配置。Namespace 的常用場景之一是不同環境的配置的區分隔離,例如開發測試環境和生產環境的資源(如配置、服務)隔離等。 Nacos 中預設有一個 public 保留空間,預設所有新增的配置都放在這個空間中 我們可以在 Nacos 視覺化介面建立自己的名稱空間 ![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200403173015.png) 新建一個配置檔案,併發布,命名規則為`服務名.properties` ![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200403173845.png) 在 `bootstrap.properties` 檔案中指定名稱空間的唯一標識,重啟該服務,即可訪問 ```properties spring.cloud.nacos.config.namespace=5a8f07f8-9fc0-480e-9d31-1a1800b7530b ``` ## 配置集 > **一組相關或者不相關的配置項的集合稱為配置集**。在系統中,一個配置檔案通常就是一個配 > 置集,包含了系統各個方面的配置。例如,一個配置集可能包含了資料來源、執行緒池、日誌級 > 別等配置項。 ## 配置集ID > **Nacos中的某個配置集的 ID。 配置集ID是組織劃分配置的維度之一**。DataID 通常用於組織劃分系統的配置集。一個系統或者應用可以包含多個配置集,每個配置集都可以被一個有意義的名稱標識。DataID 通常採用類Java 包(如com.taobao.tc.refund.log.level) 的命名規則保證全域性唯一性。 此命名規則非強制。 **類似配置檔名** ![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200403175146.png) ## 配置分組 > **Nacos 中的一組配置集,是組織配置的維度之一。**通過一個有意義的字串(如 Buy 或 Trade )對配置集進行分組,從而區分DataID 相同的配置集。當您在 Nacos 上建立一個配置時,如果未填寫配置分組的名稱,則配置分組的名稱預設採用DEFAULT_ GROUP。 在 Nacos 中新建一個分組後,需要在 `bootstrap.properties` 中指定自己要使用的分組 ```properties spring.cloud.nacos.config.group=dev ``` **通常將每個微服務建立自己的名稱空間,使用dev、prod、test等名稱作為配置分組,區分環境** ## 同時載入多個配置集 有了 Nacos 配置中心,我們就可以將所有的配置檔案都放在配置中心裡管理,專案裡只保留一個`bootstrap.properties`,非常便於管理 比如,現在將我們原本的配置檔案 `application.yml` 拆分為幾個部分放到配置中心 - 資料來源配置:datasource.yml ```yml spring: datasource: url: jdbc:mysql://192.168.56.10:3306/gulimall_sms driver-class-name: com.mysql.cj.jdbc.Driver username: root password: root ``` - mybatis 配置:mybatis.yml ```yml mybatis-plus: mapper-locations: classpath:/mapper/**/*.xml global-config: db-config: id-type: auto ``` - 其他配置:other.yml ```yml server: port: 7000 spring: application: name: gulimall-coupon datasource: url: jdbc:mysql://192.168.56.10:3306/gulimall_sms driver-class-name: com.mysql.cj.jdbc.Driver username: root password: root cloud: nacos: discovery: server-addr: 127.0.0.1:8848 ``` 我們還需要在 `bootstrap.properties` 中配置如下資訊 - data-id:配置檔名 - group:分組名 - refresh:自動重新整理(預設是false),即 修改了配置中心的值後是否重新整理 ```properties spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml spring.cloud.nacos.config.ext-config[0].group=dev spring.cloud.nacos.config.ext-config[0].refresh=true spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml spring.cloud.nacos.config.ext-config[1].group=dev spring.cloud.nacos.config.ext-config[1].refresh=true spring.cloud.nacos.config.ext-config[2].data-id=other.yml spring.cloud.nacos.config.ext-config[2].group=dev spring.cloud.nacos.config.ext-config[2].refresh=true ``` 點進原始碼可發現此配置是個 List 集合,因此可以配置多個 ![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200403184555.png) 配置完成後,可以訪問相關介面測試一下 ---- 更多配置請參考 **Nacos 官方文件**:[https://nacos.io/zh-cn/docs/what-is-nacos.html](https://nacos.io/zh-cn/docs/what-is-nacos.html) # Spring-Cloud-Gatway API閘道器 ## 簡介 閘道器作為**流量的入口**,常用功能包括路由轉發、許可權校驗、限流控制等。而 springcloud gateway 作為 SpringCloud 官方推出的第二代閘道器框架,取代了 Zuul 閘道器。 ![幾種閘道器的效能對比](https://gitee.com/songjilong/FigureBed/raw/master/img/20200403185637.png) ## 使用 開啟服務註冊發現、配置 Nacos 註冊中心、配置中心地址、埠 ```yml server: port: 88 spring: cloud: nacos: discovery: server-addr: 127.0.0.1:8848 ``` ```properties spring.application.name=gulimall-coupon spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.config.namespace=24b9f0bf-ac39-431e-80f0-4daa0b923b7a ``` 配置路由,使我們輸入`localhost:88?query=baidu`可以跳轉到百度官網,輸入`localhost:88?query=qq`可以跳轉到qq官網 ```yml spring: cloud: gateway: routes: - id: test_baidu uri: https://www.baidu.com predicates: - Query=query,baidu - id: test_qq uri: https://www.qq.com predicates: - Query=query,qq ``` ![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200403203141.png) ---- **官方文件:**https://cloud.spring.io/spring-cloud-gateway/2.1.x/single/spring-cloud-gate