zoukankan      html  css  js  c++  java
  • spring-cloud-alibaba-gateway

    一、spring-cloud-alibaba-gateway

    1、pom.xml
    <!-- gateway 路由网关依赖 webflux-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    
    <!-- gateway 结合 Redis 实现限流 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
    </dependency>
    
    <!-- nacos 客户端 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
    <!-- nacos 配置中心 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
    2、application.yml
    server:
      port: 6001
    
    spring:
      application:
        name: gateway-server # 应用名
      redis:
        host: 172.21.25.56 # Redis服务器地址
        port: 6379 # Redis服务器连接端口
        # Redis 服务器连接密码(默认为空),注释放到上面来,不然控制台可能会一直打印日志
        password:
      cloud:
        nacos:
          discovery:
            server-addr: 172.21.25.56:8848 # 注册中心地址
        gateway:
          discovery:
            locator:
              # true 开启以服务名称调用目标服务
              enabled: true
          routes:
            # 路由唯一标识
            - id: blog-article
              # 目标服务地址
              # uri: http://localhost:8001
              # 目标微服务名称 lb://目标服务名
              uri: lb://article-server
              # 断言,路由条件
              predicates:
                # 匹配访问路由,以 /article开头的请求代理到
                # 访问 http://localhost:6001/article/api/article/1 代理到 http://localhost:8001/article/api/article/1
                - Path=/article/**
              filters:
                # 代理转发去掉路径, /article/** ,会将 每个 /article 在过滤器中截取掉
                # - StripPrefix=1
                # 开启限流
                - name: RequestRateLimiter
                  args:
                    # 限制过滤器bean名称
                    key-resolver: '#{@uriKeyResolver}'
                    # 希望每个用户每秒执行多少个请求。令牌桶填充的速率
                    redis-rate-limiter.replenishRate: 2
                    # 允许用户在一秒种内完成最大请求数。令牌桶最多可以容纳的令牌数量 。如果设置为0将阻止所有请求
                    redis-rate-limiter.burstCapacity: 4
            # 路由唯一标识
            - id: blog-question
              # 目标微服务名称 lb://目标服务名
              uri: lb://question-server
              # 断言,路由条件
              predicates:
                # 匹配访问路由,以 /question 开头的请求代理到
                - Path=/question/**
              filters:
                # 开启限流
                - name: RequestRateLimiter
                  args:
                    # 限制过滤器bean名称
                    key-resolver: '#{@uriKeyResolver}'
                    # 希望每个用户每秒执行多少个请求。令牌桶填充的速率
                    redis-rate-limiter.replenishRate: 2
                    # 允许用户在一秒种内完成最大请求数。令牌桶最多可以容纳的令牌数量 。如果设置为0将阻止所有请求
                    redis-rate-limiter.burstCapacity: 4
          globalcors: # 网关cors跨域设置
            cors-configurations:
              '[/**]': # gateway网关上所有的uri都应用下面的跨域设置
                allowed-credentials: true # 允许携带认证信息
                allowed-origins:
                  - "*" # 允许所有来源进行跨域访问
                allowed-headers: "*" # 允许跨域请求里的head字段,设置为*是全部
                allowed-methods: # 允许跨域的方法
                  - GET
                  - POST
                  - PUT
                  - DELETE
                  - OPTIONS
                max-age: 3600
    
    3、网关限流(定义组件uriKeyResolver)
    @Component("uriKeyResolver")
    public class UriKeyResolver implements KeyResolver {
        @Override
        public Mono<String> resolve(ServerWebExchange exchange) {
            // 针对微服务的每个请求进行限流
            return Mono.just(exchange.getRequest().getURI().getPath());
        }
    }
    
  • 相关阅读:
    ALV 填值返回更新屏幕
    alv 的几种形式 和 函数
    JS 截取字符串的空格
    codeigniter 轻量级架构知识初习
    之前的博客挂掉了
    在服务器上运行php文件来执行操作
    浏览器判断
    php 汉字判断
    web 套打方法实现打印机功能
    WIN8
  • 原文地址:https://www.cnblogs.com/linding/p/14885146.html
Copyright © 2011-2022 走看看