spring微服务之gateway的介绍与使用

目录

1. gateway作用:

2. gateway路由转发 Route

3. gateway断言 Predicates

4. gateway过滤器 Filters

 1.全局过滤器GlobalFilter

2.局部过滤器GatewayFilter同理;

5. gateway跨域问题globalcors

6. gateway限流 

7.常见限流方式:


1. gateway作用:

网关的核心功能特性

  • 请求路由
  • 权限控制
  • 限流、降级、熔断等
2. gateway路由转发 Route

 1.yml文件形式

spring:
  application:
    name: gateway-service
  cloud:
    gateway:
      discovery:
        locator:
          #是否自动配置路由规则
          enabled: false
          #是否支持配置小写路由规则 
          lower-case-service-id: true
      routes:
      #对“/user/**”的所有请求转发到微服务USER-CLIENT中请求处理
      - id: userclient
        uri: lb://USER-CLIENT
        predicates:
        - Path=/user/**
        

2. java形式

 

3. gateway断言 Predicates

        对于请求参数进行限制:

 # 这里只给出了局部配置,其他配置保持不变
spring:
  cloud:
    gateway:
      routes:
        - id: weight_high
          uri: https://a.org
          predicates:
            - Weight=group1, 8
        - id: weight_low
          uri: https://b.org
          predicates:
            - Weight=group1, 2
# 这条路线会将大约80%的流量转发到a.org,将大约20%的流量转发到b.org。

也可以在java bean中配置,见上;

4. gateway过滤器 Filters
 1.全局过滤器GlobalFilter

package cn.itcast.gateway.filters;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Order(-1) // 默认 2147483647
@Component
public class AuthorizeFilter implements GlobalFilter,Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 1.获取请求参数
        MultiValueMap<String, String> params = exchange.getRequest().getQueryParams();
        // 2.获取authorization参数
        String auth = params.getFirst("authorization");
        // 3.校验
        if ("admin".equals(auth)) {
            // 放行, 需要传入上下文
            return chain.filter(exchange);
        }
        // 4.拦截
        // 4.1.禁止访问,设置状态码
        exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
        // 4.2.结束处理
        return exchange.getResponse().setComplete();
    }

@Override
public int getOrder() {
    return 0;
}

}

2.局部过滤器GatewayFilter同理;
5. gateway跨域问题globalcors

        域名不同或者域名相同,端口号不同,都会产生跨域问题,浏览器不允许发生跨域请求,需要配置;

spring:
  application:
    name: gateway  #服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos地址
    gateway:
      globalcors:
        add-to-simple-url-handler-mapping: true
        cors-configurations:
          '[/**]':  #拦截的请求
            allowedOrigins: #允许跨域的请求
              - "http://localhost:8080"
            allowedMethods: #运行跨域的请求方式
              - "GET"
              - "POST"
              - "DELETE"
              - "PUT"
              - "OPTIONS"
            allowedHeaders: "*" #允许请求中携带的头信息
            allowedCredentials: true #是否允许携带cookie
            maxAge: 36000 #跨域检测的有效期,单位s

6. gateway限流 

        底层实现redis的rateLimter限流算法,lua脚本实现

1. 配置限流方式yml

cloud:
    gateway:
      #redis-rate-limiter:  全局限流配置位置
      #开启网关的跨域功能,具体微服务上的跨域需要进行关闭,否则无效
      routes:
        - id: goods
          uri: lb://dabing-goods
          predicates:
            - Path=/goods/**
          filters:
            - StripPrefix= 1
            # 具体微服务限流位置
            - name: RequestRateLimiter #请求数限流 名字不能随便写
              args:
                key-resolver: "#{@ipKeyResolver}"  #指定限流的key
                redis-rate-limiter.replenishRate: 1 # 允许每秒处理了多少个请求
                redis-rate-limiter.burstCapacity: 1 # 令牌桶的容量(最高处理并发容量大小1)
2.配置限流方式

  可以根据ip限流,根据接口限流,也可以根据接口限流,返回keyresolver

    @Bean
    public KeyResolver ipKeyResolver(){
        return new KeyResolver() {
            @Override
            public Mono<String> resolve(ServerWebExchange exchange) {
                return Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
            }
        };
    }

7.常见限流方式:

   解决方案:限流算法_keyresolver_穿城大饼的博客-CSDN博客

参考:

1. OpenFeign、GateWay网关_gateway openfeign_Forever Nore的博客-CSDN博客

2.解决方案:限流算法_keyresolver_穿城大饼的博客-CSDN博客

3.GateWay跨域问题解决(双重) - 简书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值