中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

順德外貿(mào)網(wǎng)站建設(shè)2024年新冠疫情最新消息今天

順德外貿(mào)網(wǎng)站建設(shè),2024年新冠疫情最新消息今天,網(wǎng)絡(luò)營(yíng)銷是什么證,列舉常見(jiàn)的網(wǎng)絡(luò)營(yíng)銷工具目錄 網(wǎng)關(guān)簡(jiǎn)介 什么是Spring Cloud Gateway Spring Cloud Gateway 功能特征 核心概念 工作原理 Spring Cloud Gateway快速開(kāi)始 環(huán)境搭建 集成Nacos 路由斷言工廠(Route Predicate Factories)配置 自定義路由斷言工廠 過(guò)濾器工廠( …

目錄

網(wǎng)關(guān)簡(jiǎn)介

什么是Spring Cloud Gateway

Spring Cloud Gateway 功能特征

核心概念

工作原理

Spring Cloud Gateway快速開(kāi)始

環(huán)境搭建

集成Nacos

路由斷言工廠(Route Predicate Factories)配置

自定義路由斷言工廠

過(guò)濾器工廠(?GatewayFilter?Factories)配置

添加請(qǐng)求頭

?為匹配的路由統(tǒng)一添加前綴

重定向操作

自定義過(guò)濾器工廠

全局過(guò)濾器(Global Filters)配置

Gateway跨域配置(CORS Configuration)

gateway整合sentinel流控降級(jí)

網(wǎng)關(guān)高可用


網(wǎng)關(guān)簡(jiǎn)介

大家都都知道在微服務(wù)架構(gòu)中,一個(gè)系統(tǒng)會(huì)被拆分為很多個(gè)微服務(wù)。那么作為客戶端要如何去調(diào)用這么多的微服務(wù)呢?

如果沒(méi)有網(wǎng)關(guān)的存在,我們只能在客戶端記錄每個(gè)微服務(wù)的地址,然后分別去用。

這樣的架構(gòu),會(huì)存在著諸多的問(wèn)題:

  • 每個(gè)業(yè)務(wù)都會(huì)需要鑒權(quán)、限流、權(quán)限校驗(yàn)、跨域等邏輯,如果每個(gè)業(yè)務(wù)都各自為戰(zhàn),自己造輪子實(shí)現(xiàn)一遍,會(huì)很蛋疼,完全可以抽出來(lái),放到一個(gè)統(tǒng)一的地方去做。
  • 如果業(yè)務(wù)量比較簡(jiǎn)單的話,這種方式前期不會(huì)有什么問(wèn)題,但隨著業(yè)務(wù)越來(lái)越復(fù)雜,比如淘寶、亞馬遜打開(kāi)一個(gè)頁(yè)面可能會(huì)涉及到數(shù)百個(gè)微服務(wù)協(xié)同工作,如果每一個(gè)微服務(wù)都分配一個(gè)域名的話,一方面客戶端代碼會(huì)很難維護(hù),涉及到數(shù)百個(gè)域名,另一方面是連接數(shù)的瓶頸,想象一下你打開(kāi)一個(gè)APP,通過(guò)抓包發(fā)現(xiàn)涉及到了數(shù)百個(gè)遠(yuǎn)程調(diào)用,這在移動(dòng)端下會(huì)顯得非常低效。
  • 后期如果需要對(duì)微服務(wù)進(jìn)行重構(gòu)的話,也會(huì)變的非常麻煩,需要客戶端配合你一起進(jìn)行改造,比如商品服務(wù),隨著業(yè)務(wù)變的越來(lái)越復(fù)雜,后期需要進(jìn)行拆分成多個(gè)微服務(wù),這個(gè)時(shí)候?qū)ν馓峁┑姆?wù)也需要拆分成多個(gè),同時(shí)需要客戶端配合你進(jìn)行改造,非常蛋疼。

上面的這些問(wèn)題可以借助API網(wǎng)關(guān)來(lái)解決。

所謂的API網(wǎng)關(guān),就是指系統(tǒng)的統(tǒng)一入口,它封裝了應(yīng)用程序的內(nèi)部結(jié)構(gòu),為客戶端提供統(tǒng)一服務(wù),一些與業(yè)務(wù)本身功能無(wú)關(guān)的公共邏輯可以在這里實(shí)現(xiàn),諸如認(rèn)證、鑒權(quán)、監(jiān)控、路由轉(zhuǎn)發(fā)等等。

添加上API網(wǎng)關(guān)之后,系統(tǒng)的架構(gòu)圖變成了如下所示:

我們也可以觀察下,我們現(xiàn)在的整體架構(gòu)圖:

什么是Spring Cloud Gateway

網(wǎng)關(guān)作為流量的入口,常用的功能包括路由轉(zhuǎn)發(fā),權(quán)限校驗(yàn),限流等。

Spring Cloud Gateway 是Spring Cloud官方推出的第二代網(wǎng)關(guān)框架,定位于取代 Netflix Zuul1.0。相比 Zuul 來(lái)說(shuō),Spring Cloud Gateway 提供更優(yōu)秀的性能,更強(qiáng)大的有功能。

Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 實(shí)現(xiàn)的響應(yīng)式的 API 網(wǎng)關(guān)。它不能在傳統(tǒng)的 servlet 容器中工作,也不能構(gòu)建成 war 包。

Spring Cloud Gateway 旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單且有效的 API 路由的管理方式,并基于 Filter 的方式提供網(wǎng)關(guān)的基本功能,例如說(shuō)安全認(rèn)證、監(jiān)控、限流等等。

其他的網(wǎng)關(guān)組件:

在SpringCloud微服務(wù)體系中,有個(gè)很重要的組件就是網(wǎng)關(guān),在1.x版本中都是采用的Zuul網(wǎng)關(guān);但在2.x版本中,zuul的升級(jí)一直跳票,SpringCloud最后自己研發(fā)了一個(gè)網(wǎng)關(guān)替代Zuul,那就是SpringCloud Gateway

網(wǎng)上很多地方都說(shuō)Zuul是阻塞的,Gateway是非阻塞的,這么說(shuō)是不嚴(yán)謹(jǐn)?shù)?#xff0c;準(zhǔn)確的講Zuul1.x是阻塞的,而在2.x的版本中,Zuul也是基于Netty,也是非阻塞的,如果一定要說(shuō)性能,其實(shí)這個(gè)真沒(méi)多大差距。

而官方出過(guò)一個(gè)測(cè)試項(xiàng)目,創(chuàng)建了一個(gè)benchmark的測(cè)試項(xiàng)目:spring-cloud-gateway-bench,其中對(duì)比了:

性能強(qiáng)勁:是第一代網(wǎng)關(guān)Zuul的1.6倍

官網(wǎng)文檔:Spring Cloud Gateway

Spring Cloud Gateway 功能特征

  • 基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 進(jìn)行構(gòu)建;
  • 動(dòng)態(tài)路由:能夠匹配任何請(qǐng)求屬性;
  • 支持路徑重寫;
  • 集成 Spring Cloud 服務(wù)發(fā)現(xiàn)功能(Nacos、Eruka);
  • 可集成流控降級(jí)功能(Sentinel、Hystrix);
  • 可以對(duì)路由指定易于編寫的 Predicate(斷言)和 Filter(過(guò)濾器);

核心概念

  • 路由(route)

路由是網(wǎng)關(guān)中最基礎(chǔ)的部分,路由信息包括一個(gè)ID、一個(gè)目的URI、一組斷言工廠、一組Filter組成。如果斷言為真,則說(shuō)明請(qǐng)求的URL和配置的路由匹配。

  • 斷言(predicates)

Java8中的斷言函數(shù),SpringCloud Gateway中的斷言函數(shù)類型是Spring5.0框架中的ServerWebExchange。斷言函數(shù)允許開(kāi)發(fā)者去定義匹配Http request中的任何信息,比如請(qǐng)求頭和參數(shù)等。

  • 過(guò)濾器(Filter)

SpringCloud Gateway中的filter分為Gateway FilIer和Global Filter。Filter可以對(duì)請(qǐng)求和響應(yīng)進(jìn)行處理。

工作原理

執(zhí)行流程大體如下:

  1. Gateway Client向Gateway Server發(fā)送請(qǐng)求
  2. 請(qǐng)求首先會(huì)被HttpWebHandlerAdapter進(jìn)行提取組裝成網(wǎng)關(guān)上下文
  3. 然后網(wǎng)關(guān)的上下文會(huì)傳遞到DispatcherHandler,它負(fù)責(zé)將請(qǐng)求分發(fā)給RoutePredicateHandlerMapping
  4. RoutePredicateHandlerMapping負(fù)責(zé)路由查找,并根據(jù)路由斷言判斷路由是否可用
  5. 如果過(guò)斷言成功,由FilteringWebHandler創(chuàng)建過(guò)濾器鏈并調(diào)用
  6. 請(qǐng)求會(huì)一次經(jīng)過(guò)PreFilter--微服務(wù)--PostFilter的方法,最終返回響應(yīng)

Spring Cloud Gateway快速開(kāi)始

環(huán)境搭建

引入依賴

<!-- gateway網(wǎng)關(guān) -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

注意:會(huì)和spring-webmvc的依賴沖突,需要排除spring-webmvc

編寫yml配置文件

server:port: 8888
spring:application:name: api-gatewaycloud:gateway:routes: # 路由數(shù)組[路由 就是指定當(dāng)請(qǐng)求滿足什么條件的時(shí)候轉(zhuǎn)到哪個(gè)微服務(wù)]- id: product_route # 當(dāng)前路由的標(biāo)識(shí), 要求唯一 uri: http://localhost:8081 # 請(qǐng)求要轉(zhuǎn)發(fā)到的地址order: 1 # 路由的優(yōu)先級(jí),數(shù)字越小級(jí)別越高predicates: # 斷言(就是路由轉(zhuǎn)發(fā)要滿足的條件)- Path=/product-serv/** # 當(dāng)請(qǐng)求路徑滿足Path指定的規(guī)則時(shí),才進(jìn)行路由轉(zhuǎn)發(fā)filters: # 過(guò)濾器,請(qǐng)求在傳遞過(guò)程中可以通過(guò)過(guò)濾器對(duì)其進(jìn)行一定的修改- StripPrefix=1    # 轉(zhuǎn)發(fā)之前去掉1層路徑.

集成Nacos

現(xiàn)在在配置文件中寫死了轉(zhuǎn)發(fā)路徑的地址, 前面我們已經(jīng)分析過(guò)地址寫死帶來(lái)的問(wèn)題, 接下來(lái)我們從注冊(cè)中心獲取此地址。

引入依賴

<!-- nacos服務(wù)注冊(cè)與發(fā)現(xiàn) -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

編寫yml配置文件

server:port: 8888spring:application:name: api-gatewaycloud:nacos:discovery:server-addr: 127.0.0.1:8848gateway:routes:- id: product_routeuri: lb://service-product # lb指的是從nacos中按照名稱獲取微服務(wù),并遵循負(fù)載均衡策略predicates:- Path=/product-serve/**filters:- StripPrefix=1

測(cè)試

這時(shí)候,就發(fā)現(xiàn)只要按照網(wǎng)關(guān)地址/微服務(wù)/接口的格式去訪問(wèn),就可以得到成功響應(yīng)。

路由斷言工廠(Route Predicate Factories)配置

https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories?

作用: 當(dāng)請(qǐng)求gateway的時(shí)候, 使用斷言對(duì)請(qǐng)求進(jìn)行匹配, 如果匹配成功就路由轉(zhuǎn)發(fā), 如果匹配失敗就返回404

類型:內(nèi)置,自定義

SpringCloud Gateway包括許多內(nèi)置的斷言工廠,所有這些斷言都與HTTP請(qǐng)求的不同屬性匹配。具體如下:

  • 基于Datetime類型的斷言工廠

此類型的斷言根據(jù)時(shí)間做判斷,主要有三個(gè):

AfterRoutePredicateFactory: 接收一個(gè)日期參數(shù),判斷請(qǐng)求日期是否晚于指定日期

BeforeRoutePredicateFactory: 接收一個(gè)日期參數(shù),判斷請(qǐng)求日期是否早于指定日期

BetweenRoutePredicateFactory: 接收兩個(gè)日期參數(shù),判斷請(qǐng)求日期是否在指定時(shí)間段內(nèi)

ZonedDateTime.now()

- After=2019-12-31T23:59:59.789+08:00[Asia/Shanghai]
  • 基于遠(yuǎn)程地址的斷言工廠?

RemoteAddrRoutePredicateFactory:接收一個(gè)IP地址段,判斷請(qǐng)求主機(jī)地址是否在地址段中

- RemoteAddr=192.168.1.1/24
  • 基于Cookie的斷言工廠

CookieRoutePredicateFactory:接收兩個(gè)參數(shù),cookie 名字和一個(gè)正則表達(dá)式。 判斷請(qǐng)求

cookie是否具有給定名稱且值與正則表達(dá)式匹配。

-Cookie=chocolate, ch.
  • 基于Header的斷言工廠

HeaderRoutePredicateFactory:接收兩個(gè)參數(shù),標(biāo)題名稱和正則表達(dá)式。? 判斷請(qǐng)求Header是否具有給定名稱且值與正則表達(dá)式匹配。

-Header=X-Request-Id, \d+
  • 基于Host的斷言工廠

HostRoutePredicateFactory:接收一個(gè)參數(shù),主機(jī)名模式。判斷請(qǐng)求的Host是否滿足匹配規(guī)則。

-Host=**.testhost.org
  • 基于Method請(qǐng)求方法的斷言工廠

MethodRoutePredicateFactory:接收一個(gè)參數(shù),判斷請(qǐng)求類型是否跟指定的類型匹配。

-Method=GET
  • 基于Path請(qǐng)求路徑的斷言工廠

PathRoutePredicateFactory:接收一個(gè)參數(shù),判斷請(qǐng)求的URI部分是否滿足路徑規(guī)則。

-Path=/foo/{segment}
  • 基于Query請(qǐng)求參數(shù)的斷言工廠

QueryRoutePredicateFactory :接收兩個(gè)參數(shù),請(qǐng)求param和正則表達(dá)式, 判斷請(qǐng)求參數(shù)是否具有給定名稱且值與正則表達(dá)式匹配。

-Query=baz, ba.
  • 基于路由權(quán)重的斷言工廠

WeightRoutePredicateFactory:接收一個(gè)[組名,權(quán)重], 然后對(duì)于同一個(gè)組內(nèi)的路由按照權(quán)重轉(zhuǎn)發(fā)

routes:-id: weight_route1 uri: host1 predicates:-Path=/product/**-Weight=group3, 1-id: weight_route2 uri: host2 predicates:-Path=/product/**-Weight= group3, 9

自定義路由斷言工廠

自定義路由斷言工廠需要繼承 AbstractRoutePredicateFactory 類,重寫 apply 方法的邏輯。在 apply 方法中可以通過(guò) exchange.getRequest() 拿到 ServerHttpRequest 對(duì)象,從而可以獲取到請(qǐng)求的參數(shù)、請(qǐng)求方式、請(qǐng)求頭等信息。

1、必須spring組件 bean

2. 類必須加上RoutePredicateFactory作為結(jié)尾

3. 必須繼承AbstractRoutePredicateFactory

4. 必須聲明靜態(tài)內(nèi)部類 聲明屬性來(lái)接收 配置文件中對(duì)應(yīng)的斷言的信息

5. 需要結(jié)合shortcutFieldOrder進(jìn)行綁定

6.通過(guò)apply進(jìn)行邏輯判斷 true就是匹配成功 false匹配失敗

注意: 命名需要以 RoutePredicateFactory 結(jié)尾

@Component
@Slf4j
public class CheckAuthRoutePredicateFactory extends AbstractRoutePredicateFactory<CheckAuthRoutePredicateFactory.Config> {public CheckAuthRoutePredicateFactory() {super(Config.class);}@Overridepublic Predicate<ServerWebExchange> apply(Config config) {return new GatewayPredicate() {@Overridepublic boolean test(ServerWebExchange serverWebExchange) {log.info("調(diào)用CheckAuthRoutePredicateFactory" + config.getName());if(config.getName().equals("xushu")){return true;}return false;}};}/*** 快捷配置* @return*/@Overridepublic List<String> shortcutFieldOrder() {return Collections.singletonList("name");}public static class Config {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}
}

yml中配置

spring:cloud:gateway:#設(shè)置路由:路由id、路由到微服務(wù)的uri、斷言routes:- id: order_route  #路由ID,全局唯一uri: http://localhost:8020  #目標(biāo)微服務(wù)的請(qǐng)求地址和端口predicates:# 測(cè)試:http://localhost:8888/order/findOrderByUserId/1- Path=/order/**   #Path路徑匹配#自定義CheckAuth斷言工廠 - CheckAuth=xushu

過(guò)濾器工廠(?GatewayFilter?Factories)配置

Gateway 內(nèi)置了很多的過(guò)濾器工廠,我們通過(guò)一些過(guò)濾器工廠可以進(jìn)行一些業(yè)務(wù)邏輯處理器,比如添加剔除響應(yīng)頭,添加去除參數(shù)等

Spring Cloud Gateway

過(guò)濾器工廠

作用

參數(shù)

AddRequestHeader

為原始請(qǐng)求添加Header

Header的名稱及值

AddRequestParameter

為原始請(qǐng)求添加請(qǐng)求參數(shù)

參數(shù)名稱及值

AddResponseHeader

為原始響應(yīng)添加Header

Header的名稱及值

DedupeResponseHeader

剔除響應(yīng)頭中重復(fù)的值

需要去重的Header名稱及去重策略

Hystrix

為路由引入Hystrix的斷路器保護(hù)

HystrixCommand 的名稱

FallbackHeaders

為fallbackUri的請(qǐng)求頭中添加具體的異常信息

Header的名稱

Pre?xPath

為原始請(qǐng)求路徑添加前綴

前綴路徑

PreserveHostHeader

為請(qǐng)求添加一個(gè)preserveHostHeader=true 的 屬 性,路由過(guò)濾器會(huì)檢查該屬性以決定是否要發(fā)送原始的Host

無(wú)

RequestRateLimiter

用于對(duì)請(qǐng)求限流,限流算法為令牌桶

keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus

RedirectTo

將原始請(qǐng)求重定向到指定的URL

http狀態(tài)碼及重定向的url

RemoveHopByHopHeadersFilter

為原始請(qǐng)求刪除IETF組織規(guī)定的一系列Header

默認(rèn)就會(huì)啟用,可以通過(guò)配置指定僅刪除哪些Header

RemoveRequestHeader

為原始請(qǐng)求刪除某個(gè)Header

Header名稱

RemoveResponseHeader

為原始響應(yīng)刪除某個(gè)Header

Header名稱

RewritePath

重寫原始的請(qǐng)求路徑

原始路徑正則表達(dá)式以及重寫后路徑的正則表達(dá)式

RewriteResponseHeader

重寫原始響應(yīng)中的某個(gè)Header

Header名稱,值的正 則表達(dá)式,重寫后的值

SaveSession

在轉(zhuǎn)發(fā)請(qǐng)求之前,強(qiáng)制執(zhí)行

WebSession::save 操作

無(wú)

secureHeaders

為原始響應(yīng)添加一系列起安全作用的響應(yīng)頭

無(wú),支持修改這些安全響應(yīng)頭的值

SetPath

修改原始的請(qǐng)求路徑

修改后的路徑

SetResponseHeader

修改原始響應(yīng)中某個(gè)Header的值

Header名稱,修改后的值

SetStatus

修改原始響應(yīng)的狀態(tài)碼

HTTP 狀態(tài)碼,可以是數(shù)字,也可以是字符串

StripPre?x

用于截?cái)嘣颊?qǐng)求的路徑

使用數(shù)字表示要截?cái)嗟穆窂降臄?shù)量

Retry

針對(duì)不同的響應(yīng)進(jìn)行重試

retries、statuses、methods、series

RequestSize

設(shè)置允許接收最大請(qǐng)求包的大 小。如果請(qǐng)求包大小超過(guò)設(shè)置的值,則返回 413 Payload Too

Large

請(qǐng)求包大小,單位為字節(jié),默認(rèn)值為5M

ModifyRequestBody

在轉(zhuǎn)發(fā)請(qǐng)求之前修改原始請(qǐng)求體內(nèi)容

修改后的請(qǐng)求體內(nèi)容

ModifyResponseBody

修改原始響應(yīng)體的內(nèi)容

修改后的響應(yīng)體內(nèi)容

添加請(qǐng)求頭

spring:cloud:gateway:#設(shè)置路由:路由id、路由到微服務(wù)的uri、斷言routes:- id: order_route  #路由ID,全局唯一uri: http://localhost:8020  #目標(biāo)微服務(wù)的請(qǐng)求地址和端口#配置過(guò)濾器工廠filters:- AddRequestHeader=X-Request-color, red  #添加請(qǐng)求頭

測(cè)試http://localhost:8888/order/testgateway

@GetMapping("/testgateway")
public String testGateway(HttpServletRequest request) throws Exception {log.info("gateWay獲取請(qǐng)求頭X-Request-color:"+request.getHeader("X-Request-color"));return "success";
}
@GetMapping("/testgateway2")
public String testGateway(@RequestHeader("X-Request-color") String color) throws Exception {log.info("gateWay獲取請(qǐng)求頭X-Request-color:"+color);return "success";
}

添加請(qǐng)求參數(shù)

spring:cloud:gateway:#設(shè)置路由:路由id、路由到微服務(wù)的uri、斷言routes:- id: order_route  #路由ID,全局唯一uri: http://localhost:8020  #目標(biāo)微服務(wù)的請(qǐng)求地址和端口#配置過(guò)濾器工廠filters:- AddRequestParameter=color, blue  # 添加請(qǐng)求參數(shù)

測(cè)試http://localhost:8888/order/testgateway3

@GetMapping("/testgateway3")
public String testGateway3(@RequestParam("color") String color) throws Exception {log.info("gateWay獲取請(qǐng)求參數(shù)color:"+color);return "success";
}

?為匹配的路由統(tǒng)一添加前綴

spring:cloud:gateway:#設(shè)置路由:路由id、路由到微服務(wù)的uri、斷言routes:- id: order_route  #路由ID,全局唯一uri: http://localhost:8020  #目標(biāo)微服務(wù)的請(qǐng)求地址和端口#配置過(guò)濾器工廠filters:- PrefixPath=/mall-order  # 添加前綴 對(duì)應(yīng)微服務(wù)需要配置context-path

mall-order中需要配置

server:servlet:context-path: /mall-order

測(cè)試:http://localhost:8888/order/findOrderByUserId/1 ====》 http://localhost:8020/mall-order/order/findOrderByUserId/1

重定向操作

spring:cloud:gateway:#設(shè)置路由:路由id、路由到微服務(wù)的uri、斷言routes:- id: order_route  #路由ID,全局唯一uri: http://localhost:8020  #目標(biāo)微服務(wù)的請(qǐng)求地址和端口#配置過(guò)濾器工廠filters:- RedirectTo=302, https://www.baidu.com/  #重定向到百度

測(cè)試:http://localhost:8888/order/findOrderByUserId/1

自定義過(guò)濾器工廠

繼承AbstractNameValueGatewayFilterFactory且我們的自定義名稱必須要以GatewayFilterFactory結(jié)尾并交給spring管理。

@Component
@Slf4j
public class CheckAuthGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {@Overridepublic GatewayFilter apply(NameValueConfig config) {return (exchange, chain) -> {log.info("調(diào)用CheckAuthGatewayFilterFactory==="+ config.getName() + ":" + config.getValue());return chain.filter(exchange);};}
}

配置自定義的過(guò)濾器工廠

spring:cloud:gateway:#設(shè)置路由:路由id、路由到微服務(wù)的uri、斷言routes:- id: order_route  #路由ID,全局唯一uri: http://localhost:8020  #目標(biāo)微服務(wù)的請(qǐng)求地址和端口#配置過(guò)濾器工廠filters:- CheckAuth=fox,男

測(cè)試

全局過(guò)濾器(Global Filters)配置

部過(guò)濾器和全局過(guò)濾器區(qū)別:

  • 局部:局部針對(duì)某個(gè)路由, 需要在路由中進(jìn)行配置
  • 全局:針對(duì)所有路由請(qǐng)求, 一旦定義就會(huì)投入使用

Reactor Netty 訪問(wèn)日志

要啟用 Reactor Netty 訪問(wèn)日志,請(qǐng)?jiān)O(shè)置-Dreactor.netty.http.server.accessLogEnabled=true.

它必須是 Java 系統(tǒng)屬性,而不是 Spring Boot 屬性。

您可以將日志記錄系統(tǒng)配置為具有單獨(dú)的訪問(wèn)日志文件。以下示例創(chuàng)建一個(gè) Logback 配置:

logback.xml

<appender name="accessLog" class="ch.qos.logback.core.FileAppender"><file>access_log.log</file><encoder><pattern>%msg%n</pattern></encoder></appender><appender name="async" class="ch.qos.logback.classic.AsyncAppender"><appender-ref ref="accessLog" /></appender><logger name="reactor.netty.http.server.AccessLog" level="INFO" additivity="false"><appender-ref ref="async"/></logger>

Gateway跨域配置(CORS Configuration)

通過(guò)yml配置的方式Spring Cloud Gateway

spring:cloud:gateway:globalcors:cors-configurations:'[/**]':allowedOrigins: "*"allowedMethods:- GET- POST- DELETE- PUT- OPTION

通過(guò)java配置的方式

@Configuration
public class CorsConfig {@Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowedHeader("*");UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());source.registerCorsConfiguration("/**", config);return new CorsWebFilter(source);}
}

gateway整合sentinel流控降級(jí)

網(wǎng)關(guān)作為內(nèi)部系統(tǒng)外的一層屏障, 對(duì)內(nèi)起到一定的保護(hù)作用, 限流便是其中之一. 網(wǎng)關(guān)層的限流可以簡(jiǎn)單地針對(duì)不同路由進(jìn)行限流, 也可針對(duì)業(yè)務(wù)的接口進(jìn)行限流,或者根據(jù)接口的特征分組限流。

網(wǎng)關(guān)限流 · alibaba/Sentinel Wiki · GitHub

添加依賴

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

添加配置

sentinel:transport:# 添加sentinel的控制臺(tái)地址dashboard: 127.0.0.1:8080

控制臺(tái)實(shí)現(xiàn)方式:

Sentinel 1.6.3 引入了網(wǎng)關(guān)流控控制臺(tái)的支持,用戶可以直接在 Sentinel 控制臺(tái)上查看 API Gateway 實(shí)時(shí)的 route 和自定義 API 分組監(jiān)控,管理網(wǎng)關(guān)規(guī)則和 API 分組配置。

從 1.6.0 版本開(kāi)始,Sentinel 提供了 Spring Cloud Gateway 的適配模塊,可以提供兩種資源維度的限流:

  • route 維度:即在 Spring 配置文件中配置的路由條目,資源名為對(duì)應(yīng)的 routeId
  • 自定義 API 維度:用戶可以利用 Sentinel 提供的 API 來(lái)自定義一些 API 分組

自定義異常方式:

1.通過(guò)yml

spring:cloud.sentinel.scg.fallback.mode = response spring.cloud.sentinel.scg.fallback.response-body = '{"code":403,"mes":"限流了"}'

2.通過(guò)GatewayCallbackManager

/**** @Author 徐庶   QQ:1092002729* @Slogan 致敬大師,致敬未來(lái)的你*/
@Configuration
public class GatewayConfig {@PostConstructpublic void init(){BlockRequestHandler blockRequestHandler = new BlockRequestHandler() {@Overridepublic Mono<ServerResponse> handleRequest(ServerWebExchange exchange, Throwable throwable) {return ServerResponse.status(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON).body(BodyInserters.fromValue("降級(jí)了!"));}};GatewayCallbackManager.setBlockHandler(blockRequestHandler);}
}

網(wǎng)關(guān)高可用

為了保證 Gateway 的高可用性,可以同時(shí)啟動(dòng)多個(gè) Gateway 實(shí)例進(jìn)行負(fù)載,在 Gateway 的上游使用 Nginx 或者 F5 進(jìn)行負(fù)載轉(zhuǎn)發(fā)以達(dá)到高可用。

http://www.risenshineclean.com/news/22439.html

相關(guān)文章:

  • 網(wǎng)站收錄了怎么做排名百度關(guān)鍵詞是怎么排名靠前
  • 網(wǎng)站的外鏈怎么做免費(fèi)刷seo
  • b2c的電子信息網(wǎng)站系統(tǒng)清理優(yōu)化工具
  • 泉州制作網(wǎng)站開(kāi)發(fā)搜索引擎環(huán)境優(yōu)化
  • 企業(yè)網(wǎng)站建設(shè)和實(shí)現(xiàn) 論文關(guān)鍵詞推廣怎么做
  • 西京一師一優(yōu)課建設(shè)網(wǎng)站深圳優(yōu)化排名公司
  • 福州免費(fèi)企業(yè)網(wǎng)站建站更先進(jìn)的seo服務(wù)
  • 網(wǎng)站建設(shè)主題與建設(shè)目標(biāo)最火網(wǎng)站排名
  • 濱城區(qū)住房和城鄉(xiāng)建設(shè)局網(wǎng)站seo優(yōu)化的優(yōu)點(diǎn)
  • 透視圖在什么網(wǎng)站上可以做企業(yè)網(wǎng)站設(shè)計(jì)欣賞
  • 北京個(gè)人網(wǎng)站建設(shè)多少錢西安市seo排名按天優(yōu)化
  • 交流網(wǎng)站建設(shè)心得體會(huì)百度指數(shù)查詢?nèi)肟?/a>
  • 交互動(dòng)效庫(kù) 網(wǎng)站晨陽(yáng)seo顧問(wèn)
  • 網(wǎng)站 建設(shè)制作菜鳥(niǎo)教程建網(wǎng)站的流程
  • 金融做網(wǎng)站百度瀏覽器網(wǎng)頁(yè)
  • 日本人做爰過(guò)程網(wǎng)站南寧網(wǎng)站seo排名優(yōu)化
  • 揚(yáng)州學(xué)做網(wǎng)站培訓(xùn)多少錢軟件開(kāi)發(fā)公司推薦
  • 民治營(yíng)銷型網(wǎng)站費(fèi)用公眾號(hào)怎么做文章推廣
  • 關(guān)于建立網(wǎng)站的計(jì)劃寧波seo優(yōu)化流程
  • 建立一個(gè)網(wǎng)站的步驟廣州seo外包公司
  • 第三方b2c平臺(tái)有哪些aso如何優(yōu)化
  • 佛山網(wǎng)站建設(shè)哪個(gè)好點(diǎn)seo關(guān)鍵詞優(yōu)化提高網(wǎng)站排名
  • 服務(wù)器租用多少錢一個(gè)月南京關(guān)鍵詞seo公司
  • 哪些網(wǎng)站做的好處和壞處知道百度
  • 做手機(jī)網(wǎng)站的好處東莞優(yōu)化排名推廣
  • 順企網(wǎng)是什么網(wǎng)站百度免費(fèi)安裝下載
  • 東莞網(wǎng)站建設(shè)是什么意思網(wǎng)站seo診斷技巧
  • 滄州網(wǎng)站建設(shè)icp備win7優(yōu)化大師官方網(wǎng)站
  • 怎么做百度網(wǎng)站驗(yàn)證公司排名seo
  • 網(wǎng)站建設(shè)需要什么樣的內(nèi)容輸入關(guān)鍵詞自動(dòng)生成標(biāo)題