微服務(wù)新一代網(wǎng)關(guān)Gateway(一)

1、SpringCloudGateWay是什么

該項(xiàng)目提供了一個(gè)在Spring生態(tài)系統(tǒng)之上構(gòu)建的API網(wǎng)關(guān),包括:Spring 5,Spring Boot 2和Project Reactor。 Spring Cloud Gateway旨在提供一種簡單而有效的方法來路由到API,并為它們提供跨領(lǐng)域的關(guān)注點(diǎn),例如:安全性,監(jiān)視/指標(biāo)和限流。
SpringCloudGataway是基于WebFlux框架實(shí)現(xiàn)的,而WebFlux框架底層采用了非阻塞響應(yīng)式高性能的Reactor模式通信框架Netty。

1.1 特征

  • 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.x
  • 動(dòng)態(tài)路由
  • Predicates 和 Filters 作用于特定路由
  • 集成 Hystrix 斷路器
  • 集成 Spring Cloud DiscoveryClient
  • 易于編寫的 Predicates 和 Filters
  • 限流
  • 路徑重寫

1.2 核心概念

  • Route(路由): 網(wǎng)關(guān)的基本構(gòu)建塊。 它由ID,目標(biāo)URI,一系列的斷言和過濾器集合定義。 如果斷言為true,則匹配路由。
  • Predicate(斷言): 這一個(gè) Java 8 Function Predicate。輸入類型是Spring Framework ServerWebExchange。我們可以使用它來匹配HTTP的任何請求,包括headers或者parameters。
  • Filter(過濾): 這些是使用特定工廠構(gòu)造的Spring Framework GatewayFilter實(shí)例。 在這里,可以在發(fā)送下游請求之前或之后修改請求和響應(yīng)。

Web請求,就是通過一些匹配條件,定位到真正服務(wù)的節(jié)點(diǎn)。并在轉(zhuǎn)發(fā)過程的前后,做一些精細(xì)化的控制。
Predicate就是匹配條件,而Filter可以理解為一些無所不能的攔截器,再加一個(gè)url,構(gòu)成一個(gè)完整的路由。

2、微服務(wù)架構(gòu)網(wǎng)關(guān)在哪里

SpringCloud
  • 工作流程


    流程

客戶端向Spring Cloud Gateway發(fā)出請求。 如果網(wǎng)關(guān)處理程序映射確定請求與路由匹配,則將其發(fā)送到網(wǎng)關(guān)Web處理程序。Handler再通過指定的過濾器來將請求發(fā)送到我們實(shí)際服務(wù)執(zhí)行業(yè)務(wù)邏輯,然后返回。過濾器之間用虛線分開是因?yàn)檫^濾器可能再代理請求之前或之后執(zhí)行業(yè)務(wù)邏輯。Filter在pre類型的過濾器可以做參數(shù)校驗(yàn)、權(quán)限校驗(yàn)、流量監(jiān)控和日志輸出等;在post類型的過濾器可以做響應(yīng)內(nèi)容、響應(yīng)頭的修改等。

3、入門配置

網(wǎng)關(guān)路由有兩種配置方式:
1)通過application.yml配置文件

server:
  port: 9200
  
spring:
  application:
    name: Cloud-Gateway
  cloud:
    gateway:
       routes:
         -id: test_route    #路由ID要求唯一
          url: http://localhost:8080 #匹配后轉(zhuǎn)發(fā)至提供服務(wù)的路由地址
          predicates:
            -Path:/user/get/** #斷言,路徑相匹配的進(jìn)行路由
            
         -id: test_route2
          url: http://localhost:8080
          predicates:
            -Path:/order/get/**
    
eureka:
  instance:
    hostname: cloud-gateway-service
    lease-expiration-duration-in-seconds: 30
    lease-renewal-interval-in-seconds: 10
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

解釋:客戶端請求http://localhost:9200/user/get/**,經(jīng)網(wǎng)關(guān)微服務(wù)轉(zhuǎn)發(fā)至http://localhost:8080/user/get/** 去處理
2)代碼中注入@Bean自定義 RouteLocator,
配置該Bean有兩種方式:1)在啟動(dòng)類中添加;2)自定義配置@Configuration

@Configuration
public class CloudGateWayConfig {

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder) {
        RouteLocatorBuilder.builder routes = routeLocatorBuilder.routes();
        routes.route("test_route", r -> r.path("/news").url("http://baidu.com/news")).builder();
        return routes.build();
    }
}

解釋:客戶端請求http://localhost:9200/news,經(jīng)網(wǎng)關(guān)微服務(wù)轉(zhuǎn)發(fā)至http://baidu.com/news 去處理

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

相關(guān)閱讀更多精彩內(nèi)容

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