學(xué)習(xí)基于記錄,而不止于記錄。
希望自己能堅(jiān)持下去~
0.寫在前面
首先貼上官網(wǎng)地址
撰寫本文時(shí)Gateway版本:3.1.3
1.場(chǎng)景分析
??微服務(wù)集群服務(wù)隱藏在網(wǎng)關(guān)之后,出入口統(tǒng)一,結(jié)合注冊(cè)中心實(shí)現(xiàn)通信,加入負(fù)載均衡,并且和客戶端與微服務(wù)之間實(shí)現(xiàn)解耦。
??gateway支持定制化匹配規(guī)則實(shí)現(xiàn)網(wǎng)關(guān)路由,同時(shí)擁有過濾器鏈,可以管理和調(diào)度微服務(wù)網(wǎng)關(guān),對(duì)請(qǐng)求進(jìn)行過濾、流控和精準(zhǔn)指向。如下圖所示:

架構(gòu)演示圖
2.過濾器

過濾器
3.核心代碼
3.1 自定義路由
第一個(gè)路由:根據(jù)請(qǐng)求url匹配,將/get請(qǐng)求,路由向http://httpbin.org
第二個(gè)路由:根據(jù)host,并且開頭有通配符*匹配
第三個(gè)路由:依舊是根據(jù)host匹配,額外加入了路徑重寫
后續(xù)就不具體解釋,基本顧名思義。
@SpringBootApplication
public class DemogatewayApplication {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("path_route", r -> r.path("/get")
.uri("http://httpbin.org"))
.route("host_route", r -> r.host("*.myhost.org")
.uri("http://httpbin.org"))
.route("rewrite_route", r -> r.host("*.rewrite.org")
.filters(f -> f.rewritePath("/foo/(?<segment>.*)", "/${segment}"))
.uri("http://httpbin.org"))
.route("hystrix_route", r -> r.host("*.hystrix.org")
.filters(f -> f.hystrix(c -> c.setName("slowcmd")))
.uri("http://httpbin.org"))
.route("hystrix_fallback_route", r -> r.host("*.hystrixfallback.org")
.filters(f -> f.hystrix(c -> c.setName("slowcmd").setFallbackUri("forward:/hystrixfallback")))
.uri("http://httpbin.org"))
.route("limit_route", r -> r
.host("*.limited.org").and().path("/anything/**")
.filters(f -> f.requestRateLimiter(c -> c.setRateLimiter(redisRateLimiter())))
.uri("http://httpbin.org"))
.build();
}
}
3.2 過濾器
只需要重寫GlobalFilter,組件化過濾器,實(shí)現(xiàn)Ordered可以做到過濾器排序。
/**
* token過濾器
*/
@Component
@Slf4j
public class AuthFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 此處可以加入各種校驗(yàn),比如token校驗(yàn)等
return chain.filter(exchange);
}
/**
* 設(shè)置過濾器的執(zhí)行順序
*
* @return
*/
@Override
public int getOrder() {
return HIGHEST_PRECEDENCE;
}
}
4.總結(jié)
??之前微服務(wù)架構(gòu)路由管理是交給traefik實(shí)現(xiàn)的,后來?yè)Q成Gateway。traefik