spring boot gateway 搭建使用

2019-08-23  本文已影响0人  楚长铭
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-data-redis-reactive'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix'
    implementation 'org.springframework.cloud:spring-cloud-starter-consul-config'
    implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.projectreactor:reactor-test'
 spring:
  redis:
    host: localhost
    port: 6378
    timeout: 36000
    database: 0
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true #服务中心根据 service id 创建路由

      default-filters: #全局默认的filters配置
        - name: RequestRateLimiter # 限流配置 依赖于redis 限流返回状态码429
          args:
            key-resolver: '#{@ipKeyResolver}'
            redis-rate-limiter.replenishRate: 1 #令牌桶每秒填充平均速度
            redis-rate-limiter.burstCapacity: 1 #令牌桶总容量


      routes: # 负载均衡 路由代理

        - id: oauth2-resource-spr
          uri: lb://oauth2-resource-spr
          predicates:
            - Path=/oauth2resource/**  #请求路径带上该前缀
            - Method=GET,POST
          filters:
            - StripPrefix=1 #与path配饰使用,转发去除前缀

        - id: oauth2-client-sqr
          uri: lb://oauth2-client-sqr
          predicates:
            - Path=/oauth2client/**  #请求路径带上该前缀
            - Method=GET,POST
          filters:
            - StripPrefix=1 #与path配饰使用,转发去除前缀

        - id: consul-test-sqr  # 服务name
          uri: lb://consul-test-sqr # lb:// 注册中心上的服务name
          predicates:
            - Path=/consultest/**  #请求路径带上该前缀
            - Method=GET,POST
          filters:
            - StripPrefix=1 #与path配饰使用,转发去除前缀
            - name: GatewayDemoFilterFactory # 自定义过滤器
            - name: Retry # 重试配置
              args:
                retries: 3 #重试次数
                statuses: BAD_GATEWAY #状态返回码
            - name: Hystrix # 熔断器配置 需要添加熔断器依赖
              args:
                name: fallbackcmd
                fallbackUri: forward:/gatewayHystrix
      #            - name: RequestRateLimiter # 限流配置 依赖于redis 限流返回状态码429
      #              args:
      #                key-resolver: '#{@ipKeyResolver}'
      #                redis-rate-limiter.replenishRate: 1 #令牌桶每秒填充平均速度
      #                redis-rate-limiter.burstCapacity: 1 #令牌桶总容量
@Component
public class RateLimiterConfig {

    /**
     * 根据请求参数中user字段来限流
     *
     * @return
     */
//    @Bean
//    public KeyResolver userKeyResolver() {
//        return exchange -> Mono.just(Objects.requireNonNull(exchange.getRequest().getQueryParams().getFirst("user")));
//    }

    /**
     * 根据ip地址限流
     *
     * @return
     */
    @Bean
    public KeyResolver ipKeyResolver() {
        return exchange -> Mono.just(Objects.requireNonNull(exchange.getRequest().getRemoteAddress()).getHostName());
    }

}
@RestController
public class Controller {

    @GetMapping("/gatewayHystrix")
    public String gatewayHystrix(){
        return "熔断器熔断";
    }

}
上一篇下一篇

猜你喜欢

热点阅读