日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Springboot 集成Springcloud gateway的入门

發(fā)布時(shí)間:2025/3/19 javascript 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Springboot 集成Springcloud gateway的入门 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近做項(xiàng)目使用到了springcloude gateway作為網(wǎng)關(guān),因此在此記錄下springcloud gateway的入門(mén)操作,后續(xù)再將源碼解讀寫(xiě)出來(lái),先立個(gè)flag。

回歸正題,Springcloud gateway是spring 最新推出的網(wǎng)關(guān)中間件,用于代替 Netflix Zuul,因?yàn)?Netflix Zuul是基于mvc實(shí)現(xiàn)的,并發(fā)性能較低,springcloud gateway底層是通過(guò)基于netty的webflux實(shí)現(xiàn)的,并發(fā)性能比較好,因?yàn)楸容^適合高并發(fā)的網(wǎng)關(guān)。

一、依賴(lài)配置(pom文件配置)

配置property和dependencyManagement(用于聲明版本,給pom的子類(lèi)直接引用)

<properties><!-- <spring-cloud.version>Greenwich.SR2</spring-cloud.version>--><spring-cloud.version>Hoxton.SR1</spring-cloud.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>0.9.0.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

添加依賴(lài)

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId><exclusions><exclusion><groupId>com.google.guava</groupId><artifactId>guava</artifactId></exclusion></exclusions></dependency>

二、yml文件以及property文件的配置

1、bootstrap.yml文件(啟動(dòng)優(yōu)先級(jí)最高)的配置

spring:application:#聲明服務(wù)名稱(chēng)name: test-gateway-servicecloud:gateway:discovery:locator:#這里配置聲明是否使用springcloud gateway的服務(wù)注冊(cè),false 代表不使用enabled: falsedefault-filters:#聲明默認(rèn)的filter為Hystrix- name: Hystrixargs:name : default#聲明默認(rèn)的回調(diào)接口fallbackUri: 'forward:/defaultFallback'#這里配置路由規(guī)則,可以通過(guò)配置文件配置,也可以通過(guò)寫(xiě)代碼配置,#這里只展示通過(guò)配置文件配置的方式,往后展示通過(guò)代碼配置的方式routes:- id: test1-inside-router#這里指定命中path中的路徑的請(qǐng)求會(huì)跳轉(zhuǎn)到test1-service的微服務(wù)中uri: lb://test1-servicepredicates:- Path=/justTest/**filters:- StripPrefix=1- id: test2-inside-router- #這里指定命中path中的路徑的請(qǐng)求會(huì)跳轉(zhuǎn)到test2-service的微服務(wù)中uri: lb://test2-servicepredicates:- Path=/test/shop/**filters:#這里單獨(dú)聲明hystrix熔斷服務(wù)配置 hystrix:command:default:execution:isolation:strategy: SEMAPHOREthread:timeoutInMilliseconds: 4000

至此,springboot集成springcloud gateway即完成

對(duì)于路由規(guī)則的配置,除了可以通過(guò)yml或者property文件配置之外,還可以通過(guò)代碼的形式,代碼的形式樣例代碼如下:

@Configuration @Log4j2 public class FilterConfigration {@Beanpublic RouteLocator testOutSideRoute(RouteLocatorBuilder builder) {return builder.routes().route(r ->r.path("/justTest/**").filters(f -> f.filters(new CommonAuthFilter())).uri("lb://test1-service")).build();}@Beanpublic RouteLocator shopOutSideRoute(RouteLocatorBuilder builder) {return builder.routes().route(r ->r.path("test/shop/**").filters(f -> f.filters(new CommonAuthFilter())).uri("lb://test2-service")).build();} }

至此,網(wǎng)關(guān)已經(jīng)可以跑起來(lái),并路由到相應(yīng)的接口,但是,網(wǎng)關(guān)的作用并不是僅限于此,還可以做鑒權(quán)、給修改、增加請(qǐng)求的參數(shù)等等(暫時(shí)先不說(shuō)限流、熔斷的功能,后續(xù)會(huì)詳聊),如果想攔截請(qǐng)求,并做相應(yīng)的修改或者做日志記錄等,springcloud gateway給我們開(kāi)了口子,可以通過(guò)定義全局的filter或者自定義的filter來(lái)實(shí)現(xiàn)。

這里僅僅展示做簡(jiǎn)單的認(rèn)證并記錄請(qǐng)求的全局filter。

import com.alibaba.fastjson.JSON; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono;import java.util.HashMap; import java.util.List; import java.util.Map;@Component @Log4j2 public class AuthAndLogFilter implements GlobalFilter, Ordered {@Autowiredprivate RedisTemplate redisTemplate;@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest serverHttpRequest = exchange.getRequest();ServerHttpResponse serverHttpResponse = exchange.getResponse();log.info("==========網(wǎng)關(guān)收到請(qǐng)求:{}==========", serverHttpRequest.getPath());StringBuilder logBuilder = new StringBuilder();List<String> tokenList = serverHttpRequest.getHeaders().get("token");Map<String, Object> mapResult = new HashMap<>();String requestUrl = exchange.getRequest().getPath().toString();if (requestUrl.startsWith("/test/a/b/")) {log.info("白名單路徑,無(wú)需校驗(yàn)token");} else {if (!CollectionUtils.isEmpty(tokenList)) {String token = tokenList.get(0);log.info("上送的token為:{}" , token);if (!redisTemplate.hasKey(token)) {log.info("登錄超時(shí),需要重新登錄");mapResult.put("code", 500);mapResult.put("message", "登錄超時(shí),請(qǐng)重新登錄");DataBuffer bodyDataBuffer = serverHttpResponse.bufferFactory().wrap(JSON.toJSONString(mapResult).getBytes());serverHttpResponse.getHeaders().add("Content-Type", "text/plain;charset=UTF-8");return serverHttpResponse.writeWith(Mono.just(bodyDataBuffer));}} else {log.info("沒(méi)有上送token");mapResult.put("code", 500);mapResult.put("message", "登錄超時(shí),請(qǐng)重新登錄");DataBuffer bodyDataBuffer = serverHttpResponse.bufferFactory().wrap(JSON.toJSONString(mapResult).getBytes());serverHttpResponse.getHeaders().add("Content-Type", "text/plain;charset=UTF-8");return serverHttpResponse.writeWith(Mono.just(bodyDataBuffer));}}return chain.filter(exchange);}@Overridepublic int getOrder() {/*** Get the order value of this object.* Higher values are interpreted as lower priority. As a consequence,* the object with the lowest value has the highest priority (somewhat* analogous to Servlet {@code load-on-startup} values).* Same order values will result in arbitrary sort positions for the* affected objects.* 這個(gè)值越大,優(yōu)先級(jí)越低,也就是加載的順序越往后*/return -20;} }

到這里,gateway網(wǎng)關(guān)可以跑起來(lái)了,但是如果放到生產(chǎn)環(huán)境還元不行,主要是有兩個(gè)地方需要改進(jìn):

1)、路由規(guī)則都是寫(xiě)死的,萬(wàn)一又接口改動(dòng)或者新增或者刪除,則需要停服,重新發(fā)布才能生效。

2)、這里沒(méi)有使用服務(wù)發(fā)現(xiàn)中間件,不適合微服務(wù)環(huán)境

針對(duì)問(wèn)題1,可以使用基于分布式配置平臺(tái),將路由規(guī)則配置到分布式配置中間件,要改路由規(guī)則,只需要修改分布式配置文件即可,無(wú)需重啟服務(wù),或者通過(guò)開(kāi)發(fā)api接口,實(shí)現(xiàn)代碼層級(jí)自動(dòng)化動(dòng)態(tài)修改路由規(guī)則。

針對(duì)問(wèn)題2,可以使用springcloud gateway + nacos的組合來(lái)實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和分布式配置。

以上兩點(diǎn),下一篇文章再做詳細(xì)在展開(kāi)。

總結(jié)

以上是生活随笔為你收集整理的Springboot 集成Springcloud gateway的入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: proumb性欧美在线观看 | 毛片毛片毛片毛片毛片 | 337p嫩模大胆色肉噜噜噜 | 国产精品嫩草久久久久 | 无码人妻丰满熟妇精品 | 射久久 | 婷婷五月综合激情 | 女儿的朋友5中汉字晋通话 欧美成人免费高清视频 | 有色影院 | 国产三级视频网站 | 国产中文自拍 | 99久久精品国产色欲 | 欧美劲爆第一页 | 国产高清精品在线 | 免费黄视频网站 | 成人在线观看一区 | 欧美中文字幕一区 | 欧美日韩a| 国产午夜三级一区二区三 | 亚洲天堂av在线播放 | 国产高清成人 | 中文在线a∨在线 | 亚欧洲精品在线视频免费观看 | 成人片黄网站色大片免费毛片 | 日韩综合在线视频 | 色网视频 | 国产大片91 | 欧美va在线观看 | 黄色1级视频 | 91久久久久国产一区二区 | 欧美成人精品 | 色诱视频在线观看 | 国产精品网友自拍 | 亚洲涩色| 色视频在线免费观看 | 欧美精品一区二区三区三州 | 日本xxxx裸体xxxx出水 | 久草免费在线播放 | 日韩第一页在线 | 亚洲 欧美 自拍偷拍 | 日本吃奶摸下激烈网站动漫 | 特一级黄色片 | 黄页网站免费观看 | 日本激情视频在线 | 综合av第一页 | 中文字幕亚洲色图 | 国产亚洲性欧美日韩在线观看软件 | 国产经典久久 | 波多野吉衣一区 | ass大乳尤物肉体pics | 夜夜高潮夜夜爽国产伦精品 | 精品久久久久久久久久久国产字幕 | 超碰网站在线 | 五月天婷婷激情视频 | 黄色一二三区 | 99热成人 | 中文字幕色图 | 久久亚洲AV成人无码一二三 | 91偷拍网 | sm捆绑调教视频 | 午夜精品久久久久久久第一页按摩 | 精品人妻一区二区三区潮喷在线 | 黄色片在线观看免费 | 欧美视频在线免费看 | 五月婷婷爱 | 色视频一区 | 精品国产一区二区三区久久久久久 | 一区二区三区免费看视频 | 深夜视频在线观看 | 久久久一级片 | 超碰人人91 | 国产一区二区三区色淫影院 | av观看一区 | 欧美日韩在线免费 | 精品人伦一区二区三区 | 制服丝袜国产在线 | 日韩av电影网址 | 99久久久无码国产精品6 | 亚洲色图激情小说 | 欧美一级免费在线 | 日韩精品一区二区三区在线 | 久久视频免费看 | 久久精品国产亚洲av嫖农村妇女 | 欧美成人综合视频 | av中文字幕在线免费观看 | 成人自拍视频 | 超碰成人福利 | 成人欧美一区二区三区黑人免费 | 亚洲成人精品在线 | 综合视频在线观看 | 国产精品国产一区二区 | av网站导航 | 国产黑丝在线播放 | 91天堂素人 | 欧美三级视频在线观看 | 91精品久久久久久综合五月天 | 夜夜骑天天操 | 国产成人精品一区二区三区免费 | 色夜av|