溫馨提示×

溫馨提示×

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

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

spring cloud apigateway與consul的集成分析

發布時間:2021-11-15 17:17:41 來源:億速云 閱讀:377 作者:iii 欄目:大數據

本篇內容介紹了“spring cloud apigateway與consul的集成分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

spring cloud gateway 集成 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的集成分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女