【SpringCloud学习笔记】gateway网关

news2024/10/7 10:13:40

gateway网关

核心概念:

  • 路由(route):路由信息由 D、目标 RI、一组断言和一组过滤器组成。如果断言路由为真,则说明请求的 URI 和配配
  • 断言(predicate): Java8 中的断言函数,可以配置http请求的断言条件,断言成功会对匹配的路径进行路由
  • 过滤器(filter):过滤器分为两种类型,分别是 Gateway Filter 和Global Filter。过滤器可以对请求和响应进行处理

工作原理

在这里插入图片描述
客户端向Spring Cloud网关发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关Web处理程序。该处理程序运行通过特定于请求的筛选器链发送请求。筛选器由虚线分隔的原因是,筛选器可以在发送代理请求之前或之后执行逻辑。执行所有“前置”过滤器逻辑,然后发出代理请求。发出代理请求后,将执行“后”过滤器逻辑

开始使用

  • 工程目录

gateway-demo
|----eureka-server 注册中心 8761
|----gateway-server 网关服务 9002
|----user-service 用户服务 9001,提供一个查询用户列表的功能

  • 添加依赖
<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>
  • 配置文件添加路由配置
server:
  port: 9002
spring:
  application:
    name: gateway-server
  cloud:
    gateway:
      routes:
        - id: user-service #路由id
          uri: http://localhost:9001 #目标url,路由到微服务的地址
          predicates: #断言条件
            - Path=/user-service/**
          filters: #过滤器
            - StripPrefix=1
  • 将网关服务注册到注册中心
eureka:
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

最初的路由配置还没有接入到注册中心,路由的配置uri: http://localhost:9001写死的映射地址。注册到注册中心后映射地址通过服务名动态获取

cloud:
    gateway:
      routes:
        - id: user-service #路由id
          uri: lb://user-service #目标url,路由到微服务的地址
          predicates: #断言条件
            - Path=/user-service/**
          filters: #过滤器
            - StripPrefix=1

断言的使用

predicates路由匹配规则,当匹配对应的断言条件为true,才回映射到目标url

  • Path=/user/** 匹配对应的url,将匹配的url追加在目标url后面
  • Query=xxx 匹配请求参数中有指定参数的请求
  • Method=GET,POST 匹配任意get请求
  • After= 路由指定时间之后的请求
  • Before=路由指定时间之前的请求
  • RemoteAddr=192.168.21.1 匹配请求远程地址是RemoteAddr的地址
  • Header=X-Reques-Id \d+ 匹配包含指定请求头的请求
  • Cookie=匹配带有指定cookie的请求
cloud:
  gateway:
    enabled: true
    routes:
      - id: user-service #路由id
        uri: lb://user-service
        predicates: #断言条件
          - Path=/user-service/**
          - Query=abc
          - Method=post
          - After=

filters使用

  • 全局过滤器:Spring Cloud Gateway内置了很多不同类型的过滤器,另外也可以自定义全局过滤器
@Component
public class CustomGlobalGateWayFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("自定义全局过滤器执行了");
        return chain.filter(exchange);
    }
    
    /*
     * 过滤器执行顺序,数值越小优先级越高
     */
    @Override
    public int getOrder() {
        return 0;
    }
}
  • 局部过滤器
@Component
public class CustomGateWayFilter implements GatewayFilter, Ordered {
    
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("自定义过滤器执行了");
        return chain.filter(exchange);
    }

    /*
     * 过滤器执行顺序,数值越小优先级越高
     */
    @Override
    public int getOrder() {
        return 0;
    }
}
  • 注册过滤器
@Configuration
public class RoutesConfiguration {
    @Bean
    public RouteLocator routeLocator(RouteLocatorBuilder builder) {
        return builder.routes().route(r -> r
                .path("/user/**")
                .uri("lb://user-service")
                .filters(new CustomGateWayFilter())
                .id("user-service"))
                .build();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683396.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5种raid冗余磁盘阵列

1 RAID&#xff1f;作用&#xff1f; 1.1 RAID RAID就是冗余磁盘阵列&#xff0c;通常称作「磁盘阵列」的RAID (Redundant Array of Independent Disks)功能&#xff0c;多半是应用在NAS这类肩负资料储存的设备上&#xff0c;它能依据NAS里硬盘数量、容量的不同&#xff0c;提…

频段、信道、信道带宽、传输速率无线路由器2.4GHz和5GHz的区别?

无线通信是指电磁波经过空间传播传递信息的通讯方式&#xff0c;也被称为无线电通信。无论是采用何种的无线接入技术&#xff0c;都会涉及到4个重要的参数&#xff1a; 第一、频段 无线通信使用的是电磁波&#xff0c;既然是波&#xff0c;那就有频率&#xff0c;通过将电磁波…

使用 Jetpack Compose 创建自定义的对话框(Dialog)

在 Jetpack Compose 中&#xff0c;对话框&#xff08;Dialog&#xff09;是一种常见的用户界面组件&#xff0c;用于展示重要的信息、确认操作或者收集用户输入。本篇博客将带你深入了解 Jetpack Compose 中的对话框&#xff0c;并展示如何创建自定义的对话框&#xff0c;以满…

复试线即国家线!你敢不敢冲?

List item 一、学校及专业介绍 成信大近年也比较热门&#xff0c;全称成都信息工程大学&#xff08;Chengdu University of Information Technology&#xff09;&#xff0c;位于四川省成都市&#xff0c;为教育部首批“卓越工程师教育培养计划”试点高校、“四川2011计划”、“…

2023一造各科速记手册

[考点]我国建设项目总投资及工造价的构成 生产性建设项目总投资包括建设投资、建设期利息和流动资金:非生产性建设项目总投资包括建设投资、建设期利息。其中建设投资和建设期利息之和对应于固定资产投资&#xff0c;固定资产投资与建设项目的工程造价在量上相等。 工程造价是…

STM32单片机(七)ADC模拟数字转换器----第二节:ADC模数转换器练习1(AD单通道)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

【送书福利-第十三期】计算机核心基础知识需要搞懂哪些?

大家好&#xff0c;我是洲洲&#xff0c;欢迎关注&#xff0c;一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我&#xff01; 本文目录 一、前言二、书籍介绍1、《深入…

Flink基础概念及常识

1.flink入门 官方定义&#xff1a;Apache Flink是一个框架和分布式处理引擎&#xff0c;用于在无边界和有边界数据流上进行有状态的计算&#xff0c;Flink能在所有常见集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算。 简言之&#xff0c;Flink是一个分布式的计…

AUTOSAR(ETAS)工具ISOLAR简介

注&#xff1a;今天安装ETAS遇到了很多坑&#xff1a; 软件需要安装在VMware的windows虚拟机中&#xff0c;目的是因为公司的ETAS工具买的软件license是与电脑的mac地址绑定的&#xff0c;所以要想用ETAS软件&#xff0c;就必须使用虚拟机&#xff0c;然后更改mac地址&#xf…

第二十三章_Redis高性能设计之epoll和IO多路复用深度解析

before 多路复用要解决的问题 并发多客户端连接&#xff0c;在多路复用之前最简单和典型的方案&#xff1a;同步阻塞网络IO模型 这种模式的特点就是用一个进程来处理一个网络连接(一个用户请求)&#xff0c;比如一段典型的示例代码如下。 直接调用 recv 函数从一个 socket 上读…

【零基础入门学习Python---Python的五大数据类型之字典类型】

一.Python的五大数据类型之字典类型 Python中的字典是一种无序的可变容器&#xff0c;可以存储任意数量的键值对。接下来我们就来学习一下五大数据类型之字典类型。 1.1 什么是字典 字典的键必须是唯一的&#xff0c;而值则可以是任意类型的对象&#xff0c;如字符串、数字、列…

2.6C++虚基类

C 虚基类概述 C虚基类是一种特殊的基类&#xff0c;用于解决多重继承中的菱形继承问题。 虚基类通过共享基类的成员来解决这个问题。 在定义虚基类时&#xff0c;需要在基类名前加上关键字 virtual 。 虚基类的初始化和普通基类的初始化有些不同&#xff0c;因为虚基类的构…

4.salesforce权限相关

salesforce权限相关 一&#xff0c;控制用户访问权限1.Levels of Data Access&#xff08;数据访问权限级别&#xff09;1. 组织&#xff08;Organization&#xff09;级别2. 对象&#xff08;Objects&#xff09;级别3. 字段&#xff08;Fields&#xff09;级别4. 记录&#x…

【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想(学习设备树过渡部分)

一个可移植性好的驱动程序&#xff0c;应该有三个部分组成 1、驱动框架程序&#xff08;xxx_drv.c&#xff09; — 对接应用层的 open read write 函数&#xff0c;不做GPIO具体操作 2、硬件操作程序&#xff08;xxx_chip_gpio.c&#xff09;— 执行具体的GPIO操作&#xff0c;…

传输层解析

目录 传输层解析 传输层概述 传输层的作用 传输层的协议 TCP协议概述 UDP协议概述 TCP协议 TCP的封装格式 TCP的连接与断开 TCP的流控与差错控制 TCP的计时器 TCP的应用 UDP协议 UDP的封装格式 UDP的应用 UDP的流程与差错控制 传输层解析 传输层概述 传输层的…

一招搞定电脑提示“由于找不到XINPUT1_3.dll,无法继续执行代码”问题

玩游戏或者运行程序软件的时候&#xff0c;电脑提示“由于找不到XINPUT1_3.dll&#xff0c;无法继续执行代码”是怎么回事呢&#xff1f;其实xinput1_3.dll是Windows操作系统中的一个动态链接库文件&#xff0c;它是DirectX API的一部分&#xff0c;用于提供对输入设备的支持&a…

CSS之定位

作用&#xff1a;灵活的改变盒子在网页中的位置 实现&#xff1a; 1.定位模式&#xff1a;position 2.边偏移&#xff1a;设置盒子的位置 leftrighttopbottom 相对定位 position: relative 特点&#xff1a; 不脱标&#xff0c;占用自己原来位置显示模式特点保持不变设…

【Python】异常处理 ⑤ ( 异常传递 | 异常处理顺序 | 代码示例 )

文章目录 一、Python 异常传递1、异常传递性2、代码示例 - 异常传递性3、代码示例 - 在指定位置处理异常 一、Python 异常传递 1、异常传递性 在 Python 中 , 异常是具有传递性的 , 该特性是 Python 中的一个重要特性 , 它使得代码更加健壮和可靠 ; 异常传递 指的是 在代码中捕…

提高办公效率用什么?表单开发工具好不好用?

在办公流程化繁盛发展的今天&#xff0c;越来越多的企业希望通过专业的软件和工具提升办公协作效率&#xff0c;朝着数字化和流程化管理的方向靠近。那么&#xff0c;如何提高办公效率&#xff1f;如何提高表格制作质量和效率&#xff1f;表单开发工具是专业的办公软件平台之一…

ORACLE透明网关ODBC连接MYSQL

客户需求oracle访问mysql数据&#xff0c;客户是linux7.3 11.2.0.4单实例&#xff0c;字符集GBK&#xff0c;mysql是5.7.31&#xff0c;字符集UTF8&#xff0c;下面结合网上的文档和自己的实践&#xff0c;配置过程如下 1.安装oracle透明网关 首先在oracle服务器上面安装ora…