SpringCloud API网关

news2024/9/24 13:19:42

SpringCloud API网关

文章目录

  • SpringCloud API网关
    • 1. 概念
    • 2. Spring Cloud Gateway
      • 2.1 介绍
      • 2.2 操作方式
    • 3.Route Predicate Factories
      • 3.1 介绍
      • 3.2 使用方式

1. 概念

API网关,简称网关,本身是一个服务,通常作为后端服务的唯一入口,类似于整个微服务框架的门面,所有的外部客户端访问都需要经过它来进行调度和过滤:

在这里插入图片描述

它有以下核心功能:

  • 权限控制:作为微服务的入口,对用户进行权限校验,如果检验失败则进行拦截
  • 动态路由:一切请求先经过网关,但网关本身不处理业务,而是根据某种规则吧请求转发到某个微服务
  • 负载均衡:当路由的目标服务有多个时,还需要作负载均衡
  • 限流:请求流量过高时,按照网关中配置微服务能够接受的流量进行放行,避免服务压力过大

常用的网关方式有很多,而在SpringCloud中我们使用的网关方案是 Spring Cloud Gateway

2. Spring Cloud Gateway

2.1 介绍

Spring Cloud Gateway 是Spring Cloud的一个全新的API网关项目,基于Spring + SpringBoot等技术,为微服务架构提供一种简单而有效的途径来转发请求

2.2 操作方式

它的操作方式如下:

  1. 创建网关项目,API网关本身也是一个服务

    在这里插入图片描述

  2. 引入网关依赖

    <!--⽹关-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <!--基于nacos实现服务发现依赖-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!--负载均衡-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-loadbalancer</artifactId>
    </dependency>
    
  3. 编写启动类

    @SpringBootApplication
    public class GateWayApplication {
        public static void main(String[] args) {
            SpringApplication.run(GateWayApplication.class, args);
        }
    }
    
  4. 创建配置文件,添加Gateway路由配置

    server:
      port: 10030
    spring:
      application:
        name: gateway
      cloud:
        nacos:
          discovery:
            server-addr: 主机号:8848
            cluster-name: SH
            namespace: c567e423-b52b-4797-a33b-734ee78882f8
        gateway:
          routes:
            - id:
                product-service-route
              uri:
                lb://product-service # 目标服务地址,当predicates路由条件满足时转接到该地址
              predicates: # 路由条件
                - Path=/product/**
            - id:
                order-service-route
              uri:
                lb://order-service
              predicates:
                - Path=/order/**,/feign/**
    

    配置字段说明:

    • id:可自行定义,保持唯一即可
    • uri:目标服务地址,支持普通的URIlb://应用注册服务名称,lb表示负载均衡,使用lb://方式表示从注册中心获取服务地址
    • predicates:路由条件,将符合条件的请求都代理到uri参数指定的地址,如上述代码中服务请求路径为/product/**的请求都会被代理到lb://product-service 中

    配置完上述内容后,我们来进行测试,启动API网关服务,并通过网关服务10030端口访问product-service:127.0.0.1:10030/product/1001

    在这里插入图片描述

    可以看到,我们的请求符合路由条件Path=/product/**,所以网关服务将我们的请求代理到了127.0.0.1:9090/product/1001这个服务路径中了:

    在这里插入图片描述

    此时访问order-service服务也可成功:

    在这里插入图片描述

    :若显示请求时间超时可能与自己本身的服务器性能有关,我们这里开启了多个服务对此请求时比较吃服务器性能

3.Route Predicate Factories

3.1 介绍

Route Predicate Factories(路由断言工厂),在Spring Cloud Gateway中,Predicate提供了路由规则的匹配机制。比如上述代码中的 Path=/product/**,就是通过Path属性来匹配URL前缀是/product的请求。

Spring Cloud Gateway默认提供了很多Route Predicate Factory,这些Predicate会分别匹配HTTP请求的不同属性,并且

多个Predicate可以通过and逻辑进行组合

官网链接:Route Predicate Factories :: Spring Cloud Gateway

常见的predicate如下:

名称说明示例
After只匹配指定日期之后的请求predicates: - After=2023-01-20T17:42:47.789- 07:00[America/Denver]
Before只匹配指定日期之前的请求predicates: - Before=2023-01-20T17:42:47.789- 07:00[America/Denver]
Between只匹配两个指定时间之间的请求,早的在前,晚的在后predicates: - Between=2017-01-20T17:42:47.789- 07:00[America/Denver], 2017-01- 21T17:42:47.789-07:00[America/Denver]
Method只匹配指定的请求方式predicates: - Method=GET,POST
Path只匹配指定规则的路径predicates: - Path=/red/{segment},/blue/{segment}
RemoteAddr请求者的IP必须为指定范围predicates: - RemoteAddr=192.168.1.1/24
Cookie请求中包含指定Cookie,且该Cookie的值符合指定的正则表达式predicates: - Cookie=chocolate, ch.p
Header请求中包含指定Header,且该Header的值符合指定的正则表达式predicates: - Header=X-Request-Id, \d+
Host请求必须是访问某个host(根据请求中的Host字段进行匹配)predicates: - Host=** .somehost.org, **.anotherhost.org

3.2 使用方式

Predicate的使用方式很简单,只需要在配置文件中添加规则即可,如下:

gateway:
  routes:
    - id:
        product-service-route
      uri:
        lb://product-service # 目标服务地址,当predicates路由条件满足时转接到该地址
      predicates: # 路由条件
        - Path=/product/**
        - After=2025-07-31T12:39:55.113010600+08:00[Asia/Shanghai] # 只接受指定时间之后的请求

此时再重启服务,重新访问127.0.0.1:10030/product/1001,可以查询不到该接口:

在这里插入图片描述

将条件注释掉或修改时间条件即可重新访问!

:这里使用到的时间是ZonedDateTime类型的格式,可以通过ZonedDateTime.now()获取:

import org.junit.Test;

import java.time.ZonedDateTime;

public class GateWayTest {

    @Test
    public void test1() {
        System.out.println(ZonedDateTime.now());
    }
}

在这里插入图片描述

以上便是对API网关的使用介绍了!!如果内容对大家有帮助的话请给这篇文章一个三连关注吧💕( •̀ ω •́ )✧( •̀ ω •́ )✧✨

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

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

相关文章

git学习准备阶段

准备阶段 ubantu下载安装git sudo apt-get install git查看git版本 git -v注册用户名 git config --global user.name [name][name]填入自己的名字&#xff0c;如果没有空格的情况下&#xff0c;可以不加引号,–global是在全局下操作&#xff0c;如果没有这个参数就只是在本…

Orcale(备份导入导出)

1.备份恢复 1.1.备份定义 备份就是把数据库复制到转储设备的过程。其中&#xff0c;转储设备是指用于放置数据库副本的磁带或磁盘。通常也将存放于转储设备中的数据库的副本称为原数据库的备份或转储。备份是一份数据副本 1.2.备份分类 从物理与逻辑的角度来分类&#xff1a…

C++ 哈希系列容器 + 位图 + 布隆过滤器

目录 1 unordered 系列关联式容器 2 哈希介绍 3 闭散列哈希 4 哈希桶 5 封装实现unordered系列set和map 6 位图 7 哈希切割 8 布隆过滤器 1 unordered 系列关联式容器 在学习哈希结构实现之前&#xff0c;我们先学习一下哈希在库里面的一些使用unordered_set 和unorderen_m…

昂科烧录器支持HolyChip芯圣电子的8位触摸微控制器HC88T3661

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中HolyChip芯圣电子的8位触摸微控制器HC88T3661已经被昂科的通用烧录平台AP8000所支持。 HC88T3661是一颗采用高速低功耗CMOS工艺设计开发的增强型8位触摸微控制器&#xff0c;内…

探索全光网技术 | 全光网络技术方案选型建议一 (办公室场景)

全光网技术方案选型建议 | 办公室场景 目录 一、场景设计需求二、办公室场景拓扑三、部署方式四、产品相关规格说明五、方案优势与特点 校园办公室网络是校园员工日常处理工作的重要载体&#xff0c;学校领导、教学、研究、行政、财务等各部门均需要办公室网络来承载日常的工作…

【已修改 Python】TypeError: ‘tuple’ object does not support item assignment

【已修改 Python】TypeError: ‘tuple’ object does not support item assignment 在Python编程的浩瀚宇宙中&#xff0c;TypeError: tuple object does not support item assignment 是一个令人困惑但又常见的错误。它如幽灵般潜伏在代码的深处&#xff0c;当你不慎尝试修改…

C#:枚举及位标志周边知识详解(小白入门)

文章目录 枚举为什么要有枚举?枚举的性质设置默认类型和显式设置成员的值 位标志(重要)位标记是什么及作用位标志周边知识HasFlag判断是否有该功能枚举前面加Flags的好处 关于枚举的更多知识using static简化代码获取枚举成员的字面量 枚举 为什么要有枚举? 为了增加代码的…

WPF中使用定时器更新元素-DispatcherTimer

在WPF中使用定时器来更新UI元素是一种常见且有用的做法&#xff0c;特别是当你需要基于时间间隔来刷新数据或执行某些操作时。DispatcherTimer是WPF中用于在UI线程上执行周期性任务的理想选择&#xff0c;因为它确保了对UI元素的更新是线程安全的 例子程序 每隔0.5s 界面中的…

volatile的使用方法介绍

volatile的使用方法介绍 volatile的使用方法介绍 文章目录 volatile的使用方法介绍volatile的使用方法 volatile的使用方法 volatile的使用大家最熟悉的就是说防止编译器优化&#xff0c;今天我们来做一下实验 //vs2022 中volatile的修饰 #include<Windows.h> #includ…

vue3集成LuckySheet实现导入本地Excel进行在线编辑

第一步&#xff1a;克隆或者下载下面的代码 git clone https://github.com/dream-num/Luckysheet.git第二步&#xff1a;安装依赖 npm install npm install gulp -g 第三步&#xff1a;运行 npm run dev效果如下图所示 第四步&#xff1a;打包 打包执行成功后&#xff0c;…

40 元组与列表的异同点

① 列表和元组都属于有序序列&#xff0c;都支持双向索引访问其中的元素&#xff0c; 以及使用 count() 方法统计元素的出现次数和 index() 方法获取元素的索引&#xff0c;len()、map()、filter()等大量内置函数和 、*、、in 等运算符也都可以作用于列表和元组。虽然列表和元组…

互联网扭蛋机小程序,行业的发展前景

近年来&#xff0c;扭蛋机在市场上的影响力逐渐增加&#xff0c;受到了消费者的欢迎&#xff0c;发展前景非常广阔。目前&#xff0c;扭蛋机市场迎来了线上发展趋势&#xff0c;消费者也开始热衷于在线上参与扭蛋&#xff01;扭蛋机小程序的发展&#xff0c;也为行业带来了更大…

comfyui安装的报错:cuda driver easyphoto的报错坑:ONNXRuntimeError FAIL

。。。。怎么说呢。。。。坑 安装comfyui的时候&#xff0c;comfyui默认的是最新版的torch 2.5.1版本 跟我本地的cuda版本根本不匹配 于是就爆出了cuda driver不匹配&#xff0c;要升级 同事升级cuda驱动之后。。。系统整个崩了 行吧&#xff0c;花了几个小时&#xff0c;才知道…

Web框架:Django基础(1)

文章目录 Web框架&#xff1a;Django基础1.web框架底层1.1 网络通信1.2 常见软件架构1.3 手撸web框架1.4 告诉你两个关键点&#xff1a;短连接长连接 2.web框架网络通信的基本流程2.1 wsgiref2.2 werkzeug2.3 各框架的区别 小结3.快速上手django框架3.1 安装3.2 命令行3.3 Pych…

【分布式】分库分表知识点大全

为什么要分库分表 随着业务量的增加导致数据库中数据量的增加&#xff0c;可能拖慢查询的性能&#xff0c;影响业务的可用性&#xff1b;如果数据库采用读写分离&#xff0c;可能会导致从库的延迟较大&#xff0c;主库进行写操作后&#xff0c;从库因为延迟无法及时同步&#…

基于RK3588+YOLO模型打造稳固型电力巡检机器人控制器

创新打造电力巡检机器人用计算机产品方案 目前&#xff0c;智能电网建设和增强供电可靠性已上升到国家战略&#xff0c;使得我国基数庞大的电力设备的监测、运维等需求充分释放&#xff0c;变电站/配电站巡检机器人市场需求高涨。 1、电力巡检机器人的市场优势 电力系统智能巡…

MySQL的索引与SQL优化

索引 官方的定义索引是一种数据结构,从生活维度讲,假如将一本书看成是一张表, 这本书的目录就是表中的索引(Index).在数据库中数据量比较大时,为了快速找到们需要的数据可以使用索引,这样可以提高查询的效率,开发过程中,如果发现查询时频繁使用到的字段,也可以添加索引进行优化…

苹果手机相片删除了怎么恢复回来?4个妙计,任你选择

使用iPhone的用户们&#xff0c;是否曾因手误或其他原因不小心删除了重要的相片&#xff0c;不知道如何找回而手足无措&#xff1f;别急&#xff0c;这里有高效的解决方案等你来挑选。本文将直接切入主题&#xff0c;为你提供4种实用的解决苹果手机相片删除了怎么恢复回来的小妙…

2024杭电多校01——1003树

补题链接 官方题解 补充: ( ∑ u ∈ t r e e i a u ) 2 (\sum_{u \in tree_i} a_u)^2 (∑u∈treei​​au​)2 ∑ u ∈ t r e e i a u 2 2 ∑ x ∈ t r e e i , y ∈ t r e e i a x ∗ a y \sum_{u \in tree_i} a_u^{2}2\sum_{x \in tree_i,y \in tree_i} a_x*a_y ∑u∈t…

Prompt——3分钟掌握,润色论文的7条经典指令。帮助很大,一定要看!

这是一篇帮助你润色论文的ChatGPT指令合集&#xff0c;整理了润色过程中语法优化、审阅校对、专业风格等7个主要方面。 建议收藏&#xff0c;需要的时候直接CtrlV即可&#xff0c;一定对你科研有所帮助~ 1. 修复语法和句法 第一个提示是修复语法和句法。这是任何写作的关键部…