代码编织梦想

1 Route Predicate Factories

1.1 The After Route Predicate Factory

在指定时间后的请求将被路由,这里的时间使用的是Java的ZonedDateTime

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: https://www.baidu.com
          predicates:
            - After=2020-12-13T11:29:07.057+08:00[Asia/Shanghai]

在地址栏输入http://localhost:8080/,可以看到被路由到了百度
在这里插入图片描述
还有before,between使用方法类似

1.2 The Cookie Route Predicate Factory

携带指定cookie的请求将被路由。参数有两个,前者是name,后者是value,value可以使用正则表达式。

spring:
  cloud:
    gateway:
      routes:
        - id: after_route
          uri: https://www.baidu.com
          predicates:
            - Cookie=chocolate, ch.p

使用命令curl -b “chocolate=chap” localhost:8080 可以获取到b百度的页面
在这里插入图片描述
curl -b “chocolate=chp” localhost:8080 则无法获取
在这里插入图片描述
其它的根据header自定义字段,host字段,path等使用方法类似

1.3 The Weight Route Predicate Factory

可以通过权重给路由地址分流,这里具体不好演示,但经过测试,在这种配置下,路由到https://weighthigh.org的请求占80%,路由到https://weightlow.org的占20%

spring:
  cloud:
    gateway:
      routes:
      - id: weight_high
        uri: https://weighthigh.org
        predicates:
        - Weight=group1, 8
      - id: weight_low
        uri: https://weightlow.org
        predicates:
        - Weight=group1, 2

2 GatewayFilter Factories

filter也是springcloud gateway的重要部分,它分为前后两部分,在请求到达服务前和请求从服务返回后两个时间点,分别对请求进行处理。
这里我先启动一个8082端口的应用,主要作用是打印请求的header和param

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

    @GetMapping("/listHeaders")
    public ResponseEntity<String> listAllHeaders(@RequestHeader Map<String, String> headers) {
        headers.forEach((key, value) -> {
            System.out.println(String.format("Header '%s' = %s", key, value));
        });

        return new ResponseEntity<String>(String.format("Listed %d headers", headers.size()), HttpStatus.OK);
    }
    @RequestMapping(value="/listParams")
    public String bar(@RequestParam MultiValueMap<String, String> parameters){
        parameters.forEach((key, value)->{
            System.out.println(String.format("Param '%s' = %s", key, value));
        });
        return String.format("Listed %d params", parameters.size());
    }
}

2.1 The AddRequestHeader GatewayFilter Factory

spring:
  cloud:
    gateway:
      routes:
        - id: add_request_header_route
          uri: http://localhost:8082
          predicates:
            - Path=/{segment}
          filters:
            - AddRequestHeader=X-Request-red, blue

使用命令 curl -H “X-Request-red:blue” localhost:8080/listHeaders 可以看到控制台打印的头信息中含有添加的字段
在这里插入图片描述
还有很多的filter,比如在请求中加入param,在请求放回时删除一些头信息等,使用方法都类似。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_40436699/article/details/111095641

构造器(构造方法)-爱代码爱编程

知识点: 1.一个类即使什么都不写,他也会存在一个方法:构造器(构造方法)。 2.构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。   3.构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。  4.有参构造:一旦定义了有参构造,无参一定要写出来! package courses.anyu.OP

Java IO流初相识-爱代码爱编程

流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出 。—百度百科 Java中IO流的分类 按照流的流向: 分为输入流和输出流 通

Java中 i=i++ 问题底层原理解析-爱代码爱编程

有如下代码: public class Main { public static void main(String[] args) { int i = 10; i = i++; System.out.println(i); } } 运行后,发现结果为10,而不是11。这是为什么呢? 首

Java中static关键字(简单易懂!附图)-爱代码爱编程

static关键字 static表示“静态”的意思,可以用来修饰成员变量和成员方法,static的主要作用在于创建独立于具体对象的域变量或者方法。 简单理解: 被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。(被static关键字修饰的方法或者变量可以看作是这个类的属性~)并且不会因为对象的多

Java最全,最常用的输入输出汇总-爱代码爱编程

目录 第一种输入+不换行输出截图第二种写法+换行输出截图数组输入输出一维数组截图二维数组截图 第一种输入+不换行输出 import java.util.Scanner;//使用Scanner必须要加,好比C语言的头文件 public class Text { public static void main(String[] args

二叉排序树的构建,查询,删除-爱代码爱编程

示例代码如下: package com.lcw.dataStructures.binarySortTree; import java.util.*; /** * 二叉排序树 */ public class BinarySortTreeDemo { public static void main(String[] args) {