Gateway网关简介及使用

news2024/11/27 0:19:24

一、 什么是 API 网关(API Gateway)🍉

1.分布式服务架构、微服务架构与 API 网关🥝

在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平 台无关的服务协议作为各个单元间的通讯方式。

在这里插入图片描述

2.API 网关的定义🥝

网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。

API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。

3.API 网关的职能🥝

在这里插入图片描述

4.常见的API网关🥝

l Ngnix+lua

使用nginx的反向代理和负载均衡可实现对api服务器的负载均衡及高可用

lua是一种脚本语言,可以来编写一些简单的逻辑, nginx支持lua脚本

l Kong

基于Nginx+Lua开发,性能高,稳定,有多个可用的插件(限流、鉴权等等)可以开箱即用。 问题:

只支持Http协议;二次开发,自由扩展困难;提供管理API,缺乏更易用的管控、配置方式。

l Zuul 1.0----老的微服务项目

Netflix开源的网关,功能丰富,使用JAVA开发,易于二次开发 问题:缺乏管控,无法动态配

置;依赖组件较多;处理Http请求依赖的是Web容器,性能不如Nginx

Netflix提出理论—Zuul2.0 远远超过1.0—实际的产品没有出来。

l Spring Cloud Gateway

Spring公司为了替换Zuul而开发的网关服务,将在下面具体介绍。

注意:SpringCloud alibaba技术栈中并没有提供自己的网关,我们可以采用Spring Cloud Gateway来做网关

二、Gateway简介🍉

Spring Cloud Gateway是Spring公司基于Spring 5.0,Spring Boot 2.0 和 Project Reactor 等术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。它的目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控和限流。

1.为什么用Gateway🥝

Spring Cloud Gateway 可以看做是一个 Zuul 1.x 的升级版和代替品,比 Zuul 2 更早的使用 Netty 实现异步 IO,从而实现了一个简单、比 Zuul 1.x 更高效的、与 Spring Cloud 紧密配合的 API 网关。
Spring Cloud Gateway 里明确的区分了 Router 和 Filter,并且一个很大的特点是内置了非常多的开箱即用功能,并且都可以通过 SpringBoot 配置或者手工编码链式调用来使用。
比如内置了 10 种 Router,使得我们可以直接配置一下就可以随心所欲的根据 Header、或者 Path、或者 Host、或者 Query 来做路由。
比如区分了一般的 Filter 和全局 Filter,内置了 20 种 Filter 和 9 种全局 Filter,也都可以直接用。当然自定义 Filter 也非常方便。

2.Gateway组件概念🥝

在这里插入图片描述
在这里插入图片描述

3.如何使用gateway🥝

(1)引入相关依赖

在这里插入图片描述

    <!--如果你引入了gateway的依赖,那么不能引用spring-boot-starter-web的依赖。
              gateway使用的服务netty服务,如果你引入web,而web使用的tomcat服务器。两个服务会出现冲突-->
              
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

(2)编写主启动类

在这里插入图片描述

package com.lzq;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

(3)配置文件

在这里插入图片描述

#服务名称
spring:
  application:
    name: qy165-lzq
#配置路径规则
  cloud:
    gateway:
      routes:
        - id: lzq01 #路由的唯一标识-------随便起只要不重复就可以  如果不写默认uuid创建
          uri: http://localhost:8001  # 真是转发地址
          predicates:                 # 断言  当满足当前条件时进行跳转到uri  可以理解为判断
            - Path=/aaa/**

        - id: lzq02
          uri: lb://lzq-01      #lb 表示跳转方式 获取nacos上的服务器名
          predicates:
            - Path=/aaa/**
#连接nacos地址
    nacos:
      discovery:
        server-addr: localhost:8848
        register-enabled: false

在这里插入图片描述
发现uri地址是一个死数据,未来我们可以是集群。

如何解决? --我们也可以把网关交于注册中心来管理,那么网关就可以从注册中心拉取服务信息。

在这里插入图片描述
思考: 如果未来我们有1w个微服务,那么就需要在gateway中配置1w微服务的路由。

解决方案: 可以使用gateway自动定位功能

在这里插入图片描述

这里我们要注意两个服务器的组名要一样,否则找不到路径会报404
在这里插入图片描述

server:
  port: 81
spring:
  application:
    name: qy165-gateway
    #    注册中心的地址
    nacos:
      discovery:
        server-addr: localhost:8848
  #  开启微服务自动定位功能
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true

在这里插入图片描述

4.gateway常见的断言–了解🥝

l *基于**Datetime**类型的断言工厂*

此类型的断言根据时间做判断,主要有三个:

AfterRoutePredicateFactory: 接收一个日期参数,判断请求日期是否晚于指定日期

BeforeRoutePredicateFactory: 接收一个日期参数,判断请求日期是否早于指定日期

BetweenRoutePredicateFactory: 接收两个日期参数,判断请求日期是否在指定时间段内

-After=2019-12-31T23:59:59.789+08:00[Asia/Shanghai]

l *基于远程地址的断言工厂* *RemoteAddrRoutePredicateFactory**:*

接收一个IP地址段,判断请求主机地址是否在地址段中

-RemoteAddr=192.168.1.1/24

l *基于**Cookie**的断言工厂*

CookieRoutePredicateFactory:接收两个参数,cookie 名字和一个正则表达式。 判断请求

cookie是否具有给定名称且值与正则表达式匹配。

-Cookie=chocolate, ch.

l *基于**Header**的断言工厂*

HeaderRoutePredicateFactory:接收两个参数,标题名称和正则表达式。 判断请求Header是否

具有给定名称且值与正则表达式匹配。 key value

-Header=X-Request-Id, \d+

l *基于**Host**的断言工厂*

HostRoutePredicateFactory:接收一个参数,主机名模式。判断请求的Host是否满足匹配规则。

-Host=**.testhost.org

l *基于**Method**请求方法的断言工厂*

MethodRoutePredicateFactory:接收一个参数,判断请求类型是否跟指定的类型匹配。

-Method=GET

l *基于**Path**请求路径的断言工厂*

PathRoutePredicateFactory:接收一个参数,判断请求的URI部分是否满足路径规则。

-Path=/foo/{segment}基于Query请求参数的断言工厂

QueryRoutePredicateFactory :接收两个参数,请求param和正则表达式, 判断请求参数是否具

有给定名称且值与正则表达式匹配。

-Query=baz, ba.

l *基于路由权重的断言工厂*

WeightRoutePredicateFactory:接收一个[组名,权重], 然后对于同一个组内的路由按照权重转发

routes:

-id: weight_route1 uri: host1 predicates:

-Path=/product/**

-Weight=group3, 1

-id: weight_route2 uri: host2 predicates:

-Path=/product/**

-Weight= group3, 9

5.gateway内置的过滤器–了解🥝

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

MySQL数据库,创建表及其插入数据和多表查询数据

首先&#xff0c;建表 创建student表&#xff0c;SQL代码如下 create table student (id int(10) not null unique primary key, name varchar(20) not null, sex varchar (4), brith year, department varchar(20), address varchar(50) ); 创建score表。SQL代码如下&…

自动化测试selenium(1)

自动化测试&#x1f4ea;selenium 自动化测试&#x1f4ea;selenium自动化测试&#x1f4d1;selenium定位元素&#x1f4cd; 实战测试百度搜索&#x1f50d;安装测试环境Idea中进行自动化脚本编写打开网页&#xff1a;实现搜索功能&#xff1a;浏览器清空效果clear()&#xff1…

Vue通过微软官方链接预览pptx docx xlsx

目录&#xff1a; 一、实现步骤 二、实现效果 代码真实可用&#xff01; 一、实现步骤&#xff1a; 1、使用的是vue和elementUI&#xff0c; 假设有这些变量&#xff1a;attachment是附件的意思 data() {return {previewDialog: false,attachmentSrc: ,attachmentList: [{name:…

第六次CCF计算机软件能力认证

第一题&#xff1a;数位之和 给定一个十进制整数 n&#xff0c;输出 n 的各位数字之和。 输入格式 输入一个整数 n。 输出格式 输出一个整数&#xff0c;表示答案。 数据范围 1≤n≤1e9 输入样例&#xff1a; 20151220输出样例&#xff1a; 13样例解释 20151220 的各位数字之和…

PhaseNet论文阅读总结

PhaseNet论文阅读总结 PhaseNet: a deep-neural-network-based seismic arrival-time pickingmethod 背景 地震监测和定位是地震学的基础 地震目录的质量主要取决于到达时间测量的数量和精度相位拾取一般都是网络分析员来执行但是地震仪越来越多&#xff0c;数据流增加&#…

记录自己的程序移植经历(裸机软PLC C语言程序移植到Linux)

先说一下本人的基础&#xff0c;本人是一个小公司初来乍到的实习生&#xff0c;拿到这个任务的时候&#xff0c;不懂PLC&#xff0c;而对于linux只懂一点点皮毛的操作。结果硬是把程序移植完毕且能顺利运行。 该程序是嵌入式软PLC&#xff0c;主要代码是对四元式指令的解析。说…

解决Hadoop集群hive库建表中文和表数据乱码问题

最近在测试环境,发现DDL建表后,发现中文注释和表数据乱码的问题,如下 查询元数据 原因是hive 的 metastore 支持的字符集是 latin1,所以中文写入的时候会有编码问题。 解决方案如下: 对MySQL的编码设置 [client]下面增加 default-character-set=utf8 在[mysqld]下面增…

Pytorch如何打印与Keras的model.summary()类似的输出

1 Keras的model.summary() 2 Pytorch实现 2.1 安装torchsummary包 pip install torchsummary2.2 代码 import torch import torch.nn as nn import torch.nn.functional as F from torchsummary import summaryclass Net(nn.Module):def __init__(self):super(Net, self).__…

微服务Gateway网关(自动定位/自定义过滤器/解决跨域)+nginx反向代理gateway集群

目录 Gateway网关 1.0.为什么需要网关&#xff1f; 1.1.如何使用gateway网关 1.2.网关从注册中心拉取服务 1.3.gateway自动定位 1.4.gateway常见的断言 1.5.gateway内置的过滤器 1.6.自定义过滤器-全局过滤器 1.7.解决跨域问题 2.nginx反向代理gateway集群 2.1.配置…

Matplotlib坐标轴格式

在一个函数图像中&#xff0c;有时自变量 x 与因变量 y 是指数对应关系&#xff0c;这时需要将坐标轴刻度设置为对数刻度。Matplotlib 通过 axes 对象的xscale或yscale属性来实现对坐标轴的格式设置。 示例&#xff1a;右侧的子图显示对数刻度&#xff0c;左侧子图则显示标量刻…

61、Mysql中MVCC是什么

什么是MVCC 多版本并发控制&#xff1a;读取数据时通过一种类似快照的方式将数据保存下来&#xff0c;这样读锁就和写锁不冲突了&#xff0c;不同的事务session会看到自己特定版本的数据&#xff0c;版本链 MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作。…

apache ozone详细介绍

Ozone是哪路神 Apache Ozone https://github.com/apache/ozone Ozone是Apache软件基金会下的一个项目&#xff0c;其定位是&#xff1a;一个用户大数据分析和云原生应用、具有高扩展性、强一致性的分布式Key-Value对象存储。 HDFS是业界默认的大数据存储系统&#xff0c;在业…

ThunderScope开源示波器

简介 4CH&#xff0c;1GSa/S 开源示波器。前端很简洁&#xff0c;BUF802LMH6518&#xff0c;ADC是HMCAD1511&#xff0c;用Xilinx A7 FPGA进行控制&#xff0c;数据通过PCIE总线传输到上位机处理。目前这个项目已经被挂到了Xilinx官网&#xff0c;强。 设计日志&#xff1a;h…

设计自己的脚手架

如何设计自己的脚手架 前言前置知识如何搭建一个脚手架搭建自己的脚手架初始化项目安装依赖packagejson 配置lint 和typescript配置 加入bin字段调试npm link调试核心代码实现获取所有命令create实现 美化项目添加logo 发包源码仓库 前言 ​ 在工程中&#xff0c;不仅是软件工…

车载测试:CANoe中环境变量和系统变量的区别

目录 环境变量和系统变量相同点&#xff1a; 环境变量和系统变量不同点&#xff1a; 环境变量和系统变量相同点&#xff1a; 都可以作为ECU、面板和CAPL程序相连接的媒介。例如&#xff0c;在CAPL程序中&#xff0c;通过改变或监控某一环境变量的值可以触发特定的动作&#x…

Java处理doc类型的Word文档转换成html(按顺序保留格式+图片)

最新有个新需求&#xff0c;就是doc文档转换html内容倒不是很难&#xff0c;给大家分享一下&#xff0c;总体思路就是按doc转html的思路来走&#xff0c;唯一缺点是不会自动转换图片&#xff0c;图片是要手动转成base64&#xff0c;默认是有html、body、head、meta等等标签&…

基于深度学习的高精度农作物机器与行人目标检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度农作物机器与行人目标检测系统可用于日常生活中或野外来检测与定位农作物机器与行人目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的农作物机器与行人目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果…

查询自己档案存在哪里

查询自己档案存在哪里 百度搜索“全国人力资源和社会保障政务服务平台” 或者点击下方的官网链接登陆后点击“个人服务”&#xff0c;选择“档案存档情况查看”就可以看到自己的存档情况了。 全国人力资源和社会保障政务服务平台 http://zwfw.mohrss.gov.cn/portal/index

【Linux】生产者消费者模型 -- RingQueue

文章目录 1. 生产者消费者模型的理解1.1 生产者消费者模型的概念1.2 生产者消费者模型的特点1.3 生产者消费者模型的优点 2. 基于BlockQueue的生产者消费者模型 1. 生产者消费者模型的理解 1.1 生产者消费者模型的概念 生产者消费者模型就是通过一个容器来解决生产者和消费者的…

从iPhone恢复已删除音视频的5种主要方法

“我需要从iPhone恢复已删除的音视频。我真的很喜欢我的音视频文件。我玩了很多封面&#xff0c;并检查听我可以改进的地方和不可以改进的地方。 iPhone是我完成这项任务的首选手机&#xff0c;因为我喜欢保持非常简单&#xff0c;我喜欢听我的iPhone。但是&#xff0c;我确实删…