返回顶部
首页 > 资讯 > 后端开发 > Python >SpringCloud Gateway的基本入门和注意点详解
  • 687
分享到

SpringCloud Gateway的基本入门和注意点详解

2024-04-02 19:04:59 687人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.gateway和zuul2.使用gateway的路由功能1. 搭载SpringCloud gateway2.简单使用gateway1.application配置1.gatew

1.gateway和zuul

spring cloud Finchley版本的gateway比zuul 1.x系列的性能和功能整体要好,且使用 Gateway 做跨域相比应用本身或是 Nginx 的好处是规则可以配置的更加灵活.

这两者相同的地方就是都是作为网关,处理前段的请求,可以进行路由到对应的服务或者url,也可以针对权限做过滤处理,也可以对其他服务响应的结果做处理

截至目前springCloud gateway最新版本是2.1.0 RC3,可见官方网站SprinGCloud gateway,每个版本增加的功能都比较多,改动的地方也比较多,前几个版本有比较坑的地方,建议使用最新版本

2.使用gateway的路由功能

1. 搭载springcloud gateway

准备一个spring cloud工程,包括eureka-server注册中心,service-client服务提供者,端口8090

service-client提供一个接口:


@RestController
@Slf4j
public class ProducerController {
  @RequestMapping("/hi")
  public String hi(@RequestParam String name) {
    log.info("[client服务] [hi方法]收到请求");
    return "hi " + name + ",i am from service-client";
  }
}

再建一个spring cloud工程,service-gateway网关,端口8088

pom的依赖:


 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
    <relativePath/>
 </parent>
 <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>

application启动类:


package com.zgd.springcloud.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@EnableEurekaClient
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

这样基本的框架就搭好了,先启动eureka-server注册中心,再启动service-client和service-gateway

直接调用 localhost:8090/hi?name=zgd,可以收到


hi zgd,i am from service-client

2.简单使用gateway

GateWay大体可以分为路由工厂Route Predicate Factories,网关过滤器工厂GatewayFilter Factories,全局过滤器工厂Global Filters处理请求。

对于路由转发,Spring Cloud gateway内置了很多校验条件谓语(predicate)来实现路由功能。

比如

  • 根据时间来路由: After Route Predicate Factory某个时间点之后请求路由,Before Route Predicate Factory某个时间点之前请求路由,Between Route Predicate Factory两者时间之间
  • 通过请求路径来路由: Path Route Predicate Factory
  • 根据请求头来路由
  • 根据cookie来路由
  • 根据域名来路由

有两种方式配置,一种是配置文件application的方式,一种是代码配置

1.application配置

a. 路由到其他地址


spring:
  cloud:
    gateway:
      #可以根据请求参数,cookie,host,请求时间,请求头等进行校验判断路由, 下面根据先后顺序转发
      routes:
        - id: host_route
          uri: Http://httpbin.org:80/get
          predicates:
            - Path=/zzzgd*;q=0.8", 
    "Accept-Encoding": "gzip, deflate, br", 
    "Accept-Language": "zh-CN,zh;q=0.9", 
    "Connection": "close", 
    "Cookie": "SL_G_WPT_TO=zh; SL_GWPT_Show_Hide_tmp=undefined; SL_wptGlobTipTmp=undefined", 
    "Forwarded": "proto=http;host=\"localhost:8088\";for=\"0:0:0:0:0:0:0:1:55782\"", 
    "Host": "httpbin.org", 
    "Upgrade-Insecure-Requests": "1", 
    "User-Agent": "Mozilla/5.0 (windows NT 10.0; WOW64) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/70.0.3538.110 Safari/537.36", 
    "X-Forwarded-Host": "localhost:8088"
  }, 
  "origin": "0:0:0:0:0:0:0:1, 119.147.213.42", 
  "url": "http://localhost:8088/get?name=zgd"
}

上面的是根据地址来路由,还有下面多种路由配置:

根据域名来转发路由:


routes:
 - id: host_route
   uri: http://httpbin.org:80/get
   predicates:
     - Host=**.csdn.** # 请求域名携带csdn的,则转发
 - id: query_route
   uri: http://httpbin.org:80/get
   predicates:
     - Query=username, zzz* # 请求参数含有username,且值满足zzz开头的,则转发(对值的匹配可以省略)
 - id: header_route
   uri: http://httpbin.org:80/get
   predicates:
     - Header=request, \d+ # 如果请求头含有request,且为数字,则转发
 - id: cookie_route
      uri: http://httpbin.org:80/get
      predicates:
        - Cookie=name, zzzgd # 如果携带cookie,参数名为name,值为zzzgd,则转发
    - id: path_route
      uri: http://httpbin.org:80/get
      predicates:
        - Path=/zzzgd
@Configuration
public class GateWayConfig {
  @Bean
  public RouteLocator routeLocator(RouteLocatorBuilder builder) {
    return builder.routes()
            .route(r -> r.path("/fluent/**").and().query("name")
                    .uri("http://httpbin.org:80/get"))
            .build();
  }
}

启动,访问

http://localhost:8088/fluent/1/?name=bb

成功!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: SpringCloud Gateway的基本入门和注意点详解

本文链接: https://lsjlt.com/news/154328.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringCloud Gateway的基本入门和注意点详解
    目录1.gateway和zuul2.使用gateway的路由功能1. 搭载springcloud gateway2.简单使用gateway1.application配置1.gatew...
    99+
    2024-04-02
  • SpringCloud Eureka服务注册中心应用入门详解
    目录1.多节点无缝切换问题2.服务注册与发现 Eureka3.Springboot集成Eureka3.1 父包pom依赖3.2 eureka服务端3.3 客户端pom依赖yml配置3...
    99+
    2024-04-02
  • c++基础使用STL的注意点详解
    总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容! ...
    99+
    2024-04-02
  • WinForm入门与基本控件使用详解
    目录一.Winform入门1.WinForm项目结构  2.窗口设计与控件布局 3.窗口事件 4.时间显示器小练习二.WinForm布局开发1...
    99+
    2024-04-02
  • SpringMVC注解的入门实例详解
    目录1、在 web.xml 文件中配置前端处理器2、在 springmvc.xml 文件中配置处理器映射器,处理器适配器,视图解析器3、编写 Handler4、编写 视图 index...
    99+
    2024-04-02
  • 音视频基本概念和FFmpeg的简单入门教程详解
    目录写在前面基本概念容器/文件(Conainer/File):媒体流(Stream):数据帧/数据包(Frame/Packet):编解码器(Codec):复用(mux):解复用(mu...
    99+
    2024-04-02
  • Java SpringSecurity入门案例与基本原理详解
    目录1、入门案例1.1、创建SpringBoot项目1.2、勾选对应的maven依赖1.3、编写Controller路由1.4、启动项目2、基本原理2.1、Security的本质2....
    99+
    2024-04-02
  • react中JSX的注意点详解
    目录1 JSX 是一个表达式2 JSX 的属性2.1 驼峰命名2.2 style 接收一个对象3 JSX 标签没有子元素4 JSX 防止注入攻击5 唯一父元素总结1 JSX 是一个表...
    99+
    2024-04-02
  • Rust入门之函数和注释实例详解
    目录写在前面函数参数语句和表达式返回值注释写在前面 今天我们来学习 Rust 中的函数,最后会捎带介绍一下如何在 Rust 中写注释。也是比较轻量级的一节,大家快速过一下即可。 函数...
    99+
    2024-04-02
  • vue3:setup的两个注意点详解
    目录在vue2中在vue3中setup的注意点setup生命周期在beforecreated之前setup可以拿到两个参数,props和contextcontext.attrscon...
    99+
    2024-04-02
  • C#Marshal类基本概念和入门实例讲解
    目录C# Marshal类基本概念及入门C# Marshal.Copy实现非托管指针和数组之间的转换挑战写文件读文件总结C# Marshal类基本概念及入门 marshal:直译为...
    99+
    2023-02-26
    C# Marshal类 Marshal类基本概念 Marshal类入门
  • Python入门基本操作列表排序用法详解
    目录列表的举例1.访问python列表中的元素2.python列表的切片3.python列表的排序4.Python列表元素的添加5.Python列表元素的删除列表是最常用的Pytho...
    99+
    2024-04-02
  • Django零基础入门之路由path和re_path详解
    目录urls.py文件中的path和re_path1.path的基本规则:2.默认支持的转换器有:3.re_path正则匹配:Django中实战使用path和re_path1.url...
    99+
    2024-04-02
  • 超详细的PHP入门知识点讲解
    目录 一、简介 二、php基本语法  二、变量和作用域 三、常量 四、数据类型 五、运算符 六、流程控制 七、超全局变量 一、简介 基础知识: 需要一定的html和css的语法知识 基本概念: PHP(超文本预处理器)是一种通用开源脚本...
    99+
    2023-09-25
    php 开发语言
  • java中基本注解的知识点总结
    1、java.lang.Override是一个标记类型注解,它被用作标注方法.他说明了该方法是继承了父类的方法,就是重写了父类中同名方法。 @Override public vo...
    99+
    2024-04-02
  • java中基本注解的知识点介绍
    本篇内容主要讲解“java中基本注解的知识点介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java中基本注解的知识点介绍”吧!java.lang.Override是一个标记类型注解,它被用作...
    99+
    2023-06-20
  • 编程入门必备知识:详解常见的基本数据类型
    编程入门必备知识:详解常见的基本数据类型 在学习编程的过程中,了解和掌握基本数据类型是非常重要的。无论是使用哪种编程语言,几乎都会涉及到基本数据类型的使用。本文将详解常见的基本数据类型...
    99+
    2024-02-23
    数据类型 基本类型 编程入门
  • python的赋值语句和基本输入输出详解
    目录赋值语句直接赋值:增量赋值: 链式赋值: 多重赋值:语法糖:基本输入:input()函数:eval()函数: 基本输出:print()函数:print函数-格式化模板总结 顺序结...
    99+
    2024-04-02
  • 基于Vue3+TypeScript的全局对象的注入和使用详解
    目录1、Vue2的全局挂载2、Vue3+TypeScript的全局挂载3、Vue3+TypeScript的全局挂载的对象接口定义刚完成一些前端项目的开发,腾出精力来总结一些前端开发的...
    99+
    2024-04-02
  • 基于@RequestBody注解只能注入对象和map的解决
    目录@RequestBody注解只能注入对象和map的问题1、自定义一个适应于这种情况的注解@RequestJson2、自定义RequestJsonHandlerMethodArgu...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作