专栏首页用户1096981的专栏SpringCloud Gateway使用

SpringCloud Gateway使用

GateWay之路由转发和过滤

在一个Gateway项目(配置了eureka等组件)中进行配置

server:
  port: 9006
spring:
  application:
    name: zhao-service-gateway
  cloud:
    gateway:
      routes:
       - id: service-autodeliver-router
         #uri: http://127.0.0.1:8091
         uri: lb://zhao-service-autodeliver
         predicates:
          - Path= /autodeliver/**
       - id: service-resume-router
         #uri: http://127.0.0.1:8081
         uri: lb://zhao-service-resume
         predicates:
           - Path=/resume/**
         filters:
           - StripPrefix=1

通过第一个服务hao-service-autodeliver的配置形式,使用固定ip和服务名均可正常通过网关项目访问到服务,但是固定ip的方式不太灵活,而 lb://zhao-service-autodeliver可以实现随机的负载均衡,且不用填写固定ip也避免了不要的麻烦

第二个服务配置中 filters:- StripPrefix=1这个配置会过滤掉第一个路径配置,所以我们在最后访问的时候,除了需要加上第一个过滤掉的配置,还需要加上原本的配置。访问形式如下

GateWay断言

上述针对路径的配置即是断言predicates的配置,而Gateway还内置了以下几种断言

基本上上述断言都是基于请求携带的信息进行过滤的,在实际操作过程中可以综合使用这些信息来达到我们想要的操作

GateWay自定义全局过滤器

@Component
@Slf4j
public class BlackListFilter implements GlobalFilter, Ordered{
    private  static final List<String> blackList=new ArrayList<>();
    static {
        blackList.add("0:0:0:0:0:0:0:1");//模拟本机ip地址
    }
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response =exchange.getResponse();
        String clientIp = request.getRemoteAddress().getHostString();
        if (blackList.contains(clientIp)){
            response.setStatusCode(HttpStatus.UNAUTHORIZED);
            log.error(clientIp+"在黑名单中,拒绝访问");
            String data = "request be denied";
            DataBuffer wrap = response.bufferFactory().wrap(data.getBytes());
            return response.writeWith(Mono.just(wrap));
        }
        return chain.filter(exchange);
    }

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

通过该过滤器拦截了黑名单中的请求(该操作在实际中可借助mysql或redis等数据存储实现),实现效果

GateWay的高可用

⽹关作为⾮常核⼼的⼀个部件,如果挂掉,那么所有请求都可能⽆法路由处理,因此我们需要做GateWay的⾼可⽤。GateWay的⾼可⽤很简单:可以启动多个GateWay实例来实现⾼可⽤,在GateWay的上游使⽤Nginx等负载均衡设备进⾏负载转发以达到⾼可⽤的⽬的。启动多个GateWay实例(假如说两个,⼀个端⼝9002,⼀个端⼝9003),剩下的就是使⽤Nginx等完成负载代理即可。

代码地址https://github.com/zhendiao/deme-code/tree/main/zp

文章分享自微信公众号:
微瞰技术

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

作者:赵镇
原始发表时间:2021-07-16
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • SpringCloud Gateway基础使用

    gateway默认实现了这些谓语工厂供我们使用这些谓语工厂的功能相信大家看名字就可以看出来了。可以根据请求中的cookie、header、method、host...

    Java学习录
  • SpringCloud GateWay 使用 网关路由

    通过第一个服务hao-service-autodeliver的配置形式,使用固定ip和服务名均可正常通过网关项目访问到服务,但是固定ip的方式不太灵活,而 lb...

    FHAdmin
  • SpringCloud(十)—–Gateway

    API网关作用就是把各个服务对外提供的API汇聚起来,让外界看起来是一个统一的接口。同时也可在网关中提供额外的功能。

    全栈程序员站长
  • SpringCloud集成Gateway

    Cloud全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关;

    大忽悠爱学习
  • springcloud :Gateway网关

    gateway官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1...

    冷环渊
  • SpringCloud Gateway 详解

    SpringCloud Gateway(下面简称SG)基于SpringWebFlux,整体架构如下图所示:

    民工哥
  • SpringCloud之Gateway

    Spring Cloud Gateway旨在提供一种简单而有效的方法来路由到api,并为它们提供交叉关注点,例如:安全性、监视/度量和弹性。

    用户3467126
  • 极速体验SpringCloud Gateway

    Spring Cloud Gateway是Spring Cloud技术栈中的网关服务,本文实战构建一个SpringCloud环境,并开发一个SpringClou...

    程序员欣宸
  • 12-SpringCloud GateWay

    Springcloud中所集成的Zuul版本,采用的是Tomcat容器,使用的是传统的Serviet IO处理模型。

    彼岸舞
  • springcloud的网关-gateway

    本文来回顾学习springcloud的网关gateway,springcloud gateway是在spring的基础上构建的一套api服务网关,基于sprin...

    在水一方
  • springcloud gateway引入CORS

    springcloud gateway引入cors(全称Cross-Origin Resource Sharing,跨站资源共享),是用于限制资源访问的一种方式...

    johnhuster的分享
  • 使用springcloud gateway搭建网关(分流,限流,熔断)

    Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 ...

    java架构师
  • SpringCloud gateway跨域配置

    天涯泪小武
  • 20.SpringCloud实战项目-SpringCloud整合Gateway网关

    API网关通过注册中心实时感知微服务的状态的路由地址,准确地将请求路由到各个服务.

    悟空聊架构
  • SpringCloud技术指南系列(十二)API网关之Gateway使用

    API网关是一个更为智能的应用服务器,它的定义类似于面向对象设计模式中的Facade模式,它的存在就像是整个微服务架构系统的门面一样,所有的外部客户端访问都需要...

    品茗IT
  • springcloud gateway之addRequestParameter详细使用及踩坑注意

    SpringCloud的网关gateway提供了多个内置Filter,其中addRequestHeader是添加header的,这个无坑,比较简单。还有一个添加...

    天涯泪小武
  • SpringCloud Gateway网关基础知识

    Spring Cloud Gateway是由spring官方基于Spring5.0、Spring Boot2.x、Project React...

    BUG弄潮儿
  • springcloud 2020 gateway 503 错误代码

    当我通过uri: http://localhost:9010去调用服务时,是可以调用的,但是当我用uri lb://consumer时就无法调用服务,报错503...

    FHAdmin
  • spring-cloud-kubernetes与SpringCloud Gateway

    SpringCloud Gateway是SpringCloud技术栈下的网关服务框架,在基于SpringCloud的微服务环境中,外部请求会到达SpringCl...

    程序员欣宸

扫码关注腾讯云开发者

领取腾讯云代金券