Gateway網(wǎng)關(guān)組件_2022.09.21

學(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容