spring cloud apigateway 與consul 的整合 --Spring boot 2.12
阿新 • • 發佈:2019-07-15
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());