本篇內容介紹了“spring cloud apigateway與consul的集成分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
工程pom.xml 引入 依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
在啟動類中增加 注解 @EnableDiscoveryClient
在配置中增加網關配置
# tomcat 配置 server: port: 5000 # 服務名稱 spring: application: name: api-gateway cloud: # consul server地址 consul: host: localhost port: 8500 discovery: # 健康檢查 一定要配置 結合 spring-boot-starter-actuator 使用 health-check-path: /actuator/health health-check-interval: 10s # 網關配置 gateway: filter: remove-non-proxy-headers: headers: - dummy discovery: locator: enabled: true routes: - id: orderApi # consul 獲取的服務名稱 lb -> load balance uri: lb://order-server predicates: - Path=/api/order/** # 過濾 去掉路徑中的 /orderApi filters: - StripPrefix=1 - id: commodityApi # consul 獲取的服務名稱 lb -> load balance uri: lb://commodity-server predicates: - Path=/api/commodity/** # 過濾 去掉路徑中的 /api filters: - StripPrefix=1
gateway 自帶限流功能 需要 redis 依賴支持
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis-reactive</artifactId> </dependency>
配置需要同步修改
routes: - id: payApi # consul 獲取的服務名稱 lb -> load balance uri: lb://pay-server predicates: - Path=/api/pay/** # 過濾 去掉路徑中的 /orderApi filters: - StripPrefix=1 # 限流操作 - name: RequestRateLimiter args: # 允許用戶每秒處理多少個請求 redis-rate-limiter.replenishRate: 10 # 令牌桶的容量,允許在一秒鐘內完成的最大請求數 redis-rate-limiter.burstCapacity: 20 # ip 限流 bean key-resolver: "#{@ipKeyResolver}"
注入自定義限流類型(針對 ip 限流)
@Bean public KeyResolver ipKeyResolver() { return new KeyResolver() { @Override public Mono<String> resolve(final ServerWebExchange exchange) { return Mono.just(exchange.getRequest().getRemoteAddress().getHostName()); } }; }
在集成過程中有個深坑,就是配置限流操作的時候,本地的redis 沒有啟動,導致consul的helath check一直是down狀態
要解決health check問題 需要把 health check的詳細返回打開, 再次調用/actuator/health接口會把詳情返回了。
management: endpoint: health: show-details: always
“spring cloud apigateway與consul的集成分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。