導讀:在SpringCloud體系架構中,咱們須要部署一個單獨的網關服務對外提供訪問入口,而後網關服務根據配置好的規則將請求轉發至具體的後端服務,本章內容主要是給咱們的微服務加上網關SpringCloud Gateway。html
咱們有了三個服務account-service
,product-service
,order-service
。如今有客戶端WEB應用
或APP應用
須要訪問後端服務獲取數據那麼就須要在客戶端維護好三個服務的訪問路徑。java
這樣的架構會有以下幾個典型的問題:spring
因此咱們須要在微服務以前加一個網關服務,讓全部的客戶端只要訪問網關,網關負責對請求進行轉發;將權限校驗邏輯放到網關的過濾器中,後端服務不須要再關注權限校驗的代碼;只須要對外提供一個可供外網訪問的域名地址,新增服務後也不須要再讓運維人員進行網絡配置了,這樣上面的架構就變成了以下所示:apache
在項目中創建cloud-gateway模塊, spring-cloud-gateway
做爲微服務體系中的一環也須要將自身註冊進Nacos並集成Nacos配置中心。後端
pom.xml
<?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>cloud-aliaba</artifactId>
<groupId>com.jianzh5.cloud</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-gateway</artifactId>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
</dependencies>
</project>複製代碼
@SpringBootApplication
@EnableDiscoveryClient
public class GateWayApplication {
public static void main(String[] args) {
SpringApplication.run(GateWayApplication.class, args);
}
}複製代碼
spring:
application:
name: cloud-gateway
cloud:
nacos:
config:
server-addr: 10.0.10.48:8848
file-extension: yml
namespace: 7e8ccc22-6f51-42fa-bcf1-db45f99dbf57複製代碼
server:
port: 8090
spring:
cloud:
nacos:
discovery:
server-addr: 10.0.10.48:8848
gateway:
discovery:
locator:
enabled: true
routes:
- id: product-service
uri: lb://product-service
predicates:
- Path=/product/**
- id: account-service
uri: lb://account-service
predicates:
- Path=/account/**
- id: order-service
uri: lb://order-service
predicates:
- Path=/order/**複製代碼
配置詳解:微信
id: 在全部路由定義中須要惟一,不能重複
uri: lb:// lb://爲固定寫法,表示開啓負載均衡; 即服務在Nacos中註冊的名字
predicates:- Path=/product/ 使用"Path Route Predicate Factory",規則爲/product/ 的請求都還轉發至微服務product-service中。網絡
上面的配置邏輯爲:
① 以http://localhost:8090/product/**
的訪問路徑會轉發到product-service
微服務的/**
② 以http://localhost:8090/account/**
的訪問路徑會轉發到account-service
微服務的/**
③ 以http://localhost:8090/order/**
的訪問路徑會轉發到order-service
微服務的/**
架構
好了,各位朋友們,本期的內容到此就所有結束啦,能看到這裏的同窗都是優秀的同窗,下一個升職加薪的就是你了!若是以爲這篇文章對你有所幫助的話請掃描下面二維碼加個關注。"轉發" 加 "在看",養成好習慣!我們下期再見!app
系列文章負載均衡
歡迎掃碼關注微信公衆號或 我的博客