代碼地址
github地址
fork自github原始項目
gitee地址
fork自gitee原始項目
系統(tǒng)架構(gòu)與網(wǎng)關(guān)介紹
從圖中可以看到,在用戶端和靜態(tài)層通過接入層(nginx+防火墻)后就會到達后端服務中,首先要通過的便是網(wǎng)關(guān)層,網(wǎng)關(guān)層由springCloud gateway2+負載均衡去實現(xiàn)。
網(wǎng)關(guān)介紹
微服務架構(gòu)中的網(wǎng)關(guān)層充當了微服務體系結(jié)構(gòu)的門衛(wèi),負責處理請求、管理安全性、實施過濾和轉(zhuǎn)換、執(zhí)行路由和負載均衡等任務。通過集中管理這些功能,網(wǎng)關(guān)可以簡化微服務的客戶端訪問,并提供一些關(guān)鍵的非業(yè)務功能,以確保整個系統(tǒng)的高可用性、性能和安全性。
請求路由:網(wǎng)關(guān)充當了所有進入微服務系統(tǒng)的請求的入口點。它基于一些預定義的規(guī)則,將請求路由到適當?shù)奈⒎諏嵗?。這種路由可以基于請求的URI、HTTP方法、請求頭、查詢參數(shù)等條件進行。
負載均衡:網(wǎng)關(guān)可以與負載均衡器集成,以確保請求均勻地分發(fā)到多個微服務實例,從而提高系統(tǒng)的可用性和性能。這有助于避免單點故障,并有效地處理大量的請求。
安全性:網(wǎng)關(guān)層通常負責處理身份驗證和授權(quán),確保只有經(jīng)過身份驗證和授權(quán)的請求才能訪問受保護的微服務。它可以集成單點登錄(SSO)、OAuth、JWT驗證等安全機制。
監(jiān)控和日志:網(wǎng)關(guān)可以記錄請求和響應的信息,以便進行監(jiān)控和日志記錄。這有助于跟蹤系統(tǒng)性能問題、故障排除和安全審計。
過濾和轉(zhuǎn)換:網(wǎng)關(guān)可以通過過濾器來處理請求和響應,執(zhí)行一些非業(yè)務功能,例如請求和響應轉(zhuǎn)換、請求重試、限流、緩存、數(shù)據(jù)加密等。這些過濾器可以在請求處理過程中添加、修改或刪除請求和響應的部分內(nèi)容。
版本控制和路由策略:網(wǎng)關(guān)層允許實施版本控制策略,使得不同版本的微服務可以并存,并且請求可以根據(jù)版本號路由到適當?shù)奈⒎瞻姹尽?/p>
錯誤處理:網(wǎng)關(guān)可以處理微服務中的錯誤,并提供有意義的錯誤響應,而不是將內(nèi)部錯誤暴露給客戶端。
緩存:網(wǎng)關(guān)可以緩存常用的響應,從而減輕后端微服務的負擔,提高響應時間。
限流:網(wǎng)關(guān)可以控制流量并限制對微服務的請求速率,以防止過多的請求導致系統(tǒng)過載。
網(wǎng)關(guān)層代碼
依賴引入
在代碼中的pom文件下??梢钥吹揭肓巳缦轮饕蕾?br>
①③:引入nacos的注冊中心和配置中心依賴
②:引入loadbalancer依賴
④:引入gateway網(wǎng)關(guān)依賴
bootstrap配置
①:端口為8000
②:應用名稱:從maven配置中讀取為mall4cloud-gateway,在指定了名稱后,如果不做配置,默認的配置文件名是mall4cloud-gateway.yaml,連接上配置中心后,會自動去獲取這個默認的配置文件。
③:nacos的注冊中心地址,端口8848
④:配置中心地址,引入了上一步的同樣地址
⑤:使用默認的命名空間,
⑥:用于上面的shared-configs:application-dev.yml,從nacos獲取這個配置
接下來看一下nacos的配置
nacos配置
application-dev.yml配置都是一些公共連接信息,就不說明了,以下是網(wǎng)關(guān)單獨的配置。
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]':
allow-credentials: true
allowed-headers: "*"
# 半個月內(nèi)都允許
max-age: 1296000
# 測試環(huán)境,全部允許
allowedOriginPatterns: "*"
# allowedOrigins:
# - "http://localhost:9527"
# - "http://localhost:9527"
# - "http://localhost:9528"
# - "http://localhost:9529"
# - "http://:9527"
allowedMethods:
- GET
- POST
- PUT
- OPTIONS
- DELETE
discovery:
locator:
# 開啟服務注冊和發(fā)現(xiàn)
enabled: true
# 不手動寫路由的話,swagger整合不了...
gateway配置處理跨域問題
spring.cloud.gateway.globalcors.cors-configurations
: 這個配置項指定了CORS的配置信息,它是一個Map,其中鍵是URL匹配模式,值是CORS配置。[/**]
: 這是一個URL匹配模式,表示匹配所有的URL。這意味著這個CORS配置將應用于所有的請求路徑。allow-credentials
: true: 允許在CORS請求中包含憑據(jù)信息,例如cookies或HTTP認證信息。allowedOriginPatterns
: * 允許的來源(域)模式。在測試環(huán)境中,設置為 * 表示允許任何來源。通常情況下,也可以使用 allowedOrigins 屬性來指定具體的允許來源。allowed-headers
: * : 允許的請求頭。在這里,* 表示允許任何請求頭。max-age: 1296000
: 設置瀏覽器可以緩存CORS響應的時間,以秒為單位。在這里,設置為半個月(1296000秒)。也就是有效期內(nèi)可以不經(jīng)過cors請求直接訪問allowedMethods
: 允許的HTTP請求方法,包括GET、POST、PUT、OPTIONS和DELETE等。
這個配置用于在Spring Cloud Gateway中配置全局的CORS規(guī)則,允許前端應用程序從任何來源(在測試環(huán)境中)訪問網(wǎng)關(guān)的API,并允許包含憑據(jù)信息的請求。這有助于解決跨域請求的問題,使前端可以與后端的API進行跨域通信。
gateway路由斷言配置
routes:
- id: mall4cloud-rbac
uri: lb://mall4cloud-rbac
predicates:
- Path=/mall4cloud_rbac/**
filters:
- RewritePath=/mall4cloud_rbac(?<segment>/?.*), $\{segment}
- id: mall4cloud-auth
uri: lb://mall4cloud-auth
predicates:
- Path=/mall4cloud_auth/**
filters:
- RewritePath=/mall4cloud_auth(?<segment>/?.*), $\{segment}
routes
: 網(wǎng)關(guān)路由配置
舉例如下:
id為mall4cloud-rbac 的路由:為數(shù)組格式id
: mall4cloud-rbac:定義了這個路由的唯一標識符。uri
: lb://mall4cloud-rbac:指定了請求應該被路由到的目標服務的負載均衡地址。在這里,lb://mall4cloud-rbac 表示將請求路由到名為 mall4cloud-rbac 的服務,使用負載均衡器選擇具體的實例。predicates
:定義了請求匹配規(guī)則,這里使用 Path屬性,表示只有當請求的路徑匹配 /mall4cloud_rbac/** 時,才會應用這個路由規(guī)則。才會路由到目標服務 lb://mall4cloud-rbac
通過網(wǎng)關(guān)訪問登錄接口結(jié)果如下:
與直接訪問登錄接口是一致的結(jié)果,也就是路由是成功的
上面的結(jié)果可以理解為/mall4cloud_rbac/** 路由到lb://mall4cloud-rbac服務
這里介紹一下常用的路由斷言工廠,官網(wǎng)中有下面11中斷言方式
gateway路由過濾配置
在Spring Cloud Gateway中,可以使用過濾器(Filters)來處理進入或離開網(wǎng)關(guān)的請求和響應。這些過濾器允許你在請求和響應的不同階段執(zhí)行各種操作,例如修改請求頭、響應頭、請求體,日志記錄等。過濾器可以用于全局配置,也可以用于特定的路由規(guī)則
下面為項目的過濾器配置filters
:定義了一些路由過濾器,這里使用 RewritePath 過濾器,它將請求的路徑進行重寫。具體來說,它會將 /mall4cloud_rbac 后的路徑部分提取出來并附加到目標服務的URI中,以實現(xiàn)請求路徑的重寫。
- RewritePath:指定了要使用的過濾器工廠的名稱,這里是重寫請求路徑的過濾器。
- /mall4cloud_auth:這是要匹配的原始請求路徑的一部分。如果請求的路徑匹配這個部分,那么就會觸發(fā)這個過濾器。
(?/?.*):這是一個正則表達式捕獲組,它用于捕獲請求路徑中 /mall4cloud_auth 后面的路徑部分,并將其存儲在一個名為 segment 的變量中。 - ,${segment}:這是重寫的目標路徑的格式。它將原始請求路徑中 /mall4cloud_auth 后面的路徑部分添加到目標路徑中。
舉個例子,如果原始請求的路徑是 /mall4cloud_auth/users,那么這個過濾器將把請求路徑重寫為 /users,并將請求路由到相應的后端服務。這樣,請求路徑的 /mall4cloud_auth 部分被移除了。
此外,spring還提供了多種過濾器工廠,舉例如下:
其他各種可以根據(jù)具體需求設置過濾器,文檔在gateway官方中查看:
也可以添加全局的過濾器,例如:
創(chuàng)建一個名為 MyGlobalFilter 的全局過濾器類,并繼承GlobalFilter接口,實現(xiàn)filter方法來定義過濾邏輯,示例代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-803545.html
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 這里可以編寫過濾邏輯,例如修改請求或響應
return chain.filter(exchange); // 調(diào)用鏈中的下一個過濾器
}
@Override
public int getOrder() {
return 0; // 定義過濾器的執(zhí)行順序,0表示最高優(yōu)先級
}
}
總結(jié)
通過gateway網(wǎng)關(guān),可以對項目進行處理請求、實施過濾和轉(zhuǎn)換、執(zhí)行路由和負載均衡,這些內(nèi)容中,通常配置較多。如果項目有需求使用到gateway,可以根據(jù)網(wǎng)關(guān)的功能選取合適的方案實現(xiàn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-803545.html
到了這里,關(guān)于【SpringCloud微服務項目實戰(zhàn)-mall4cloud項目(2)】——mall4cloud-gateway的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!