91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現spring cloud getway路由配置

發布時間:2021-10-12 10:01:51 來源:億速云 閱讀:318 作者:iii 欄目:編程語言

這篇文章主要介紹“如何實現spring cloud getway路由配置”,在日常操作中,相信很多人在如何實現spring cloud getway路由配置問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何實現spring cloud getway路由配置”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1.創建工程getway-server

2.添加pom依賴:

<dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-starter-gateway</artifactId></dependency>

3.添加啟動類

如何實現spring cloud getway路由配置

4.添加配置文件:

#端口server:  port: 8080#服務名稱spring:  application:name: getway-service  cloud:gateway:      routes:
       - id: product-service         uri: lb://product-service     #根據服務名稱從注冊中心拉取服務請求路徑 predicates:
         - Path=/product/**

id:我們自定義的路由 ID,保持唯一
uri:目標服務地址
predicates:路由條件,Predicate 接受一個輸入參數,返回一個布爾值結果。該接口包含多種默
認方法來將 Predicate 組合成其他復雜的邏輯(比如:與,或,非)
 

5.啟動getway服務報錯如下:

如何實現spring cloud getway路由配置

這個錯誤是因為getway內部是通過netty + webflux實現,webflux實現和springmvc沖突

解決辦法:將父工程配置的如下依賴添加到需要的工程中:

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId></dependency>

對應在product和order服務中添加依賴,再次啟動getway服務就成功了。

訪問 http://localhost:8080/product/1

如何實現spring cloud getway路由配置

重寫轉發路徑

在SpringCloud Gateway中,路由轉發是直接將匹配的路由path直接拼接到映射路徑(URI)之后,那
么在微服務開發中往往沒有那么便利。這里就可以通過RewritePath機制來進行路徑重寫。
(1) 案例改造
修改 application.yml ,將匹配路徑改為 /product-service/**

如何實現spring cloud getway路由配置

重新啟動網關,我們在瀏覽器訪問http://127.0.0.1:8080/product-service/product/1,會拋出404。這
是由于路由轉發規則默認轉發到商品微服務( http://127.0.0.1:9002/productservice/product/1 )路徑上,而商品微服務又沒有 product-service 對應的映射配置。
(2) 添加RewritePath重寫轉發路徑
修改 application.yml ,添加重寫規則

#服務名稱spring:  application:name: getway-service  cloud:gateway:      routes:
      - id: product-service#        uri: http://127.0.0.1:9001        uri: lb://product-service     #根據服務名稱從注冊中心拉取服務請求路徑        predicates:#          - Path=/product/**        - Path=/product-service/**filters:
        - RewritePath=/product-service/(?<segment>.*), /$\{segment}#根據服務名稱配置路由轉發    discovery:      locator:enabled: true   #開啟服務名稱自動轉發        lower-case-service-id: true   #名稱小寫形式

通過RewritePath配置重寫轉發的url,將/product-service/(?.*),重寫為{segment},然后轉發到訂單
微服務。比如在網頁上請求http://localhost:8080/product-service/product,此時會將請求轉發到htt
p://127.0.0.1:9002/product/1

如何實現spring cloud getway路由配置

                                                                            網關限流 

1.pom文件添加如下依賴:

<!--redis的依賴--><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-data-redis-reactive</artifactId></dependency><!--監控依賴--><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-actuator</artifactId></dependency> 2.修改配置文件
server:  port: 8080 #端口spring:  application:name: gateway-service #服務名稱  redis:host: localhostpool: 6379database: 0  cloud: #配置SpringCloudGateway的路由    gateway:      routes:
      - id: order-serviceuri: lb://order-servicepredicates:
        - Path=/order-service/**filters:
        - RewritePath=/order-service/(?<segment>.*), /$\{segment}
      - id: product-serviceuri: lb://product-servicepredicates:
        - Path=/product-service/**filters:
        - name: RequestRateLimiter          args:#            # 使用SpEL從容器中獲取對象            key-resolver: '#{@pathKeyResolver}'#            # 令牌桶每秒填充平均速率            redis-rate-limiter.replenishRate: 1#            # 令牌桶的上限            redis-rate-limiter.burstCapacity: 3
        - RewritePath=/product-service/(?<segment>.*), /$\{segment}

3.新建KeyResolverConfiguration類

@Configurationpublic class KeyResolverConfiguration {/**     * 請求路徑的限流規則     * @return     */    @Bean    public KeyResolver pathKeyResolver() {return new KeyResolver(){public Mono<String> resolve(ServerWebExchange exchange) {return Mono.just(exchange.getRequest().getPath().toString());            }
        };    }
}

訪問 http://localhost:8080/product-service/product/1

如何實現spring cloud getway路由配置

如果連續刷新請求就會出現如下界面

如何實現spring cloud getway路由配置

通過reids的MONITOR可以監聽redis的執行過程。這時候Redis中會有對應的數據

如何實現spring cloud getway路由配置

大括號中就是我們的限流Key,這邊是IP,本地的就是localhost
timestamp:存儲的是當前時間的秒數,也就是System.currentTimeMillis() / 1000或者
Instant.now().getEpochSecond()
tokens:存儲的是當前這秒鐘的對應的可用的令牌數量
 

根據參數限流   

1.在KeyResolverConfiguration類中添加如下代碼

/** * 請求參數限流 * @return */@Beanpublic KeyResolver userKeyResolver() {return exchange -> Mono.just(
            exchange.getRequest().getQueryParams().getFirst("userId")//exchange.getRequest().getHeaders().getFirst("X-Forwarded-For") 基于請求ip的限流    );}

2.修改配置文件:

如何實現spring cloud getway路由配置

訪問同上,如果訪問頻率過高也是出現同樣的效果

訪問地址: http://localhost:8080/product-service/product/1?userId=1

需要帶上參數。

到此,關于“如何實現spring cloud getway路由配置”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绍兴市| 台江县| 吐鲁番市| 凤翔县| 西和县| 滦平县| 保德县| 绿春县| 松滋市| 仁寿县| 晋江市| 留坝县| 聂荣县| 澄江县| 垦利县| 延安市| 环江| 彭泽县| 东兴市| 福安市| 惠东县| 水富县| 太白县| 香格里拉县| 深州市| 芜湖市| 扬中市| 汪清县| 唐山市| 阳泉市| 旅游| 河北区| 筠连县| 上栗县| 柳河县| 大兴区| 大竹县| 双辽市| 达日县| 平阴县| 延川县|