浅谈Spring Cloud Gateway

这篇具有很好参考价值的文章主要介绍了浅谈Spring Cloud Gateway。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网关:用户和微服务的桥梁

网关的核心是一组过滤器,按照先后顺序执行过滤操作。

Spring Cloud Gateway是基于webFlux框架实现,而webFlux框架底层则使用了高性能的Reactor模式通信框架的Netty

Spring Cloud Gateway是Spring Cloud生态系统中的一个API网关,它基于Spring Framework 5,Spring Boot 2和Project Reactor等技术栈构建。它提供了一种简单而有效的方式来路由请求,以及对请求进行过滤和转换。

Spring Cloud Gateway的主要特点包括:

轻量级:Spring Cloud Gateway是一个轻量级的API网关,它可以快速启动和部署。

动态路由:Spring Cloud Gateway支持动态路由,可以根据请求的路径和参数将请求路由到不同的服务实例。

过滤器:Spring Cloud Gateway提供了一系列的过滤器,可以对请求进行过滤和转换,例如添加请求头、修改请求路径等。

集成性:Spring Cloud Gateway可以与Spring Cloud Config、Spring Cloud Discovery等组件集成,可以实现动态配置和服务发现。

响应式编程:Spring Cloud Gateway基于Project Reactor实现,可以实现响应式编程,提高系统的吞吐量和性能。

Spring Cloud Gateway中的Filter分为两种类型的Filter,分别是Gateway Filter和Global Filter。过滤器Filter将会对请求和响应进行修改处理。

Gateway Filter针对某一个路由filter对某一个接口做限流

Global Filter 针对全局的filter token ip黑名单

Spring Cloud Gateway快速入门

浅谈Spring Cloud Gateway

login-service

浅谈Spring Cloud Gateway

浅谈Spring Cloud Gateway

浅谈Spring Cloud Gateway

 

application.yml

server:
  port: 8081
spring:
  application:
    name: login-service

eureka:
  client:
    service-url: #指定server注册地址
      defaultZone: http://localhost:8761/eureka
    register-with-eureka: true
    fetch-registry: true
    registry-fetch-interval-seconds: 5
  instance:
    hostname: localhost
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} #主机名+应用名+端口号
gateway-service

浅谈Spring Cloud Gateway

application.yml

server:
  port: 8089 #网关
spring:
  application:
    name: gateway-service
  cloud:
      inetutils:
        ignored-interfaces: 'VMware Virtual Ethernet Adapter for VMnet1,VMware Virtual Ethernet Adapter for VMnet8'
      gateway:
        enabled: true #默认ture
        routes:
            - id: login_service_route
              uri: http://localhost:8081
              predicates:
                - Path=/doLogin  #匹配规则
eureka:
  client:
    service-url: #指定server注册地址
      defaultZone: http://localhost:8761/eureka
    register-with-eureka: true
    fetch-registry: true
    registry-fetch-interval-seconds: 5
  instance:
    hostname: localhost
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port} #主机名+应用名+端口号

浅谈Spring Cloud Gateway

 

浅谈Spring Cloud Gateway

Gateway路由配置方式

eureka、gateway、configserver auth-server

静态路由

配置文件路由

浅谈Spring Cloud Gateway

官方提供代码配置

https://spring.io/projects/spring-cloud-gateway

浅谈Spring Cloud Gateway

@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("login", r -> r.path("/doLogin").uri("http://localhost:8081"))
                .route("bili", r -> r.path("/guochuang").uri("https://www.bilibili.com/"))
                .build();

    }

}
动态路由

需要添加eureka-client依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

浅谈Spring Cloud Gateway

浅谈Spring Cloud Gateway

application.yml添加如下内容

discovery:
  locator:
    enabled: true #开启动态路由  通过应用名称 找到服务功能
    lower-case-service-id: true #开启服务名小写

login-service添加eureka-client

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

浅谈Spring Cloud Gateway

浅谈Spring Cloud Gateway

 

浅谈Spring Cloud Gateway

Gateway过滤器

浅谈Spring Cloud Gateway

过滤器生命周期分类

Pre在业务逻辑之前

Post在业务逻辑之后

过滤器种类分类

GatewayFilter 需要配置路由,才能过滤。如果需要使用全局路由,需要配置Default Filters

作用:1、记录接口访问次数 2.限流操作

globalFilter 针对全局 针对每个路由

作用:1、黑名单校验 2、全局token校验 3、参数校验

浅谈Spring Cloud Gateway

@Component
public class MGlobalFilter implements GlobalFilter, Ordered {

    /**
     * 过滤方法
     *
     * @param exchange
     * @param chain 放行
     * @return
     */
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        
        //获取请求响应,header url 参数
        ServerHttpRequest request = exchange.getRequest();
        String path = request.getURI().getPath();
        HttpHeaders headers = request.getHeaders();
        System.out.println("路径:"+path+" 请求头:"+headers);
        String name = request.getMethod().name();
        System.out.println(name);
        request.getRemoteAddress().getAddress();
        request.getRemoteAddress().getHostName();
        ServerHttpResponse response = exchange.getResponse();

        response.getHeaders().set("content-type","application/json;charset=utf-8");
        HashMap<String,Object> map =new HashMap<>(4);
        map.put("code", HttpStatus.UNAUTHORIZED.value());
        map.put("msg", "未授权登入");
        ObjectMapper objectMapper =new ObjectMapper();
        //把map转成字节
        byte[] bytes = new byte[0];
        try {
            bytes = objectMapper.writeValueAsBytes(map);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        //通过buffer工资将字节数组包装成一个数据包
        DataBuffer wrap = response.bufferFactory().wrap(bytes);
        return  response.writeWith(Mono.just(wrap));

        //放行到下一个过滤器
        //return chain.filter(exchange);
    }

    /**
     * 指定顺序的方法
     * 越小优先级越大
     * @return
     */
    @Override
    public int getOrder() {
        return 0;
    }
}文章来源地址https://www.toymoban.com/news/detail-502606.html

到了这里,关于浅谈Spring Cloud Gateway的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Eureka上集成Spring Cloud 微服务网关 gateway

    第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay API 网关是一个搭建在客户端和微服务之间的服务,我们可以在 API 网关中

    2024年02月08日
    浏览(44)
  • 【springcloud 微服务】Spring Cloud 微服务网关Gateway使用详解

    目录 一、微服务网关简介 1.1 网关的作用 1.2 常用网关 1.2.1 传统网关 1.2.2 云原生网关

    2023年04月16日
    浏览(50)
  • Spring Cloud Gateway:打造可扩展的微服务网关

    🎉欢迎来到架构设计专栏~Spring Cloud Gateway:打造可扩展的微服务网关 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平有限

    2024年02月08日
    浏览(67)
  • Spring Cloud Gateway - 新一代微服务API网关

    如果没有网关,难道不行吗?功能上是可以的,我们直接调用提供的接口就可以了。那为什么还需要网关? 因为网关的作用不仅仅是转发请求而已。我们可以试想一下,如果需要做一个请求认证功能,我们可以接入到 API 服务中。但是倘若后续又有服务需要接入,我们又需要

    2024年02月16日
    浏览(44)
  • Spring Cloud Gateway 服务网关的部署与使用详细介绍

    1、什么是服务网关:         传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关,客户端只能在本地记录每个微服务的调用地址,当需要调用的微服务数量很多时,它需要了解每个服务的接口,这个工

    2024年02月02日
    浏览(44)
  • Spring Cloud 微服务中 gateway 网关如何设置健康检测端点

    主要是为了让 k8s 识别到网关项目已经就绪,但是又不想在里面通过 Controller 实现。因为在 Controller 中这样做并不是最佳实践,因为 Gateway 的设计初衷是专注于路由和过滤,而不是业务逻辑的处理。 在 Gateway 中配置健康检查端点可以通过以下方式进行(可根据实际需求进行扩

    2024年01月17日
    浏览(47)
  • Spring Cloud Alibaba全家桶(十)——微服务网关Gateway组件

    本文小新为大家带来 微服务网关Gateway组件 相关知识,具体内容包括 微服务网关Gateway组件 (包括: Gateway核心概念 , Gateway工作原理 ), Spring Cloud Gateway环境搭建 , 路由断言工厂(Route Predicate Factories)配置 , 过滤器工厂( Gateway Filter Factories)配置 , 全局过滤器(Glob

    2023年04月08日
    浏览(48)
  • 【使用Spring Cloud Gateway构建微服务网关】—— 每天一点小知识

    ·                                                                         💧 使用 S p r i n g C l o u d G a t e w a y 构建微服务网关 color{#FF1493}{使用Spring Cloud Gateway构建微服务网关} 使用 Sp r in g Cl o u d G a t e w a y 构建微服务网关 💧        

    2024年02月10日
    浏览(54)
  • Spring Cloud Gateway:新一代微服务 API 网关,用起来真优雅!

    如果没有网关,难道不行吗?功能上是可以的,我们直接调用提供的接口就可以了。那为什么还需要网关? 因为网关的作用不仅仅是转发请求而已。我们可以试想一下,如果需要做一个请求认证功能,我们可以接入到 API 服务中。但是倘若后续又有服务需要接入,我们又需要

    2024年02月09日
    浏览(49)
  • Java之SpringCloud Alibaba【七】【Spring Cloud微服务网关Gateway组件】

    Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】 跳转 Java之SpringCloud Alibaba【二】【微服务调用组件Feign】 跳转 Java之SpringCloud Alibaba【三】【微服务Nacos-config配置中心】 跳转 Java之SpringCloud Alibaba【四】【微服务 Sentinel服务熔断】 跳转 Java之SpringCloud Alibaba【五】【微服务

    2024年02月06日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包