微服务-gateway基本使用

news2024/9/21 12:42:32

文章目录

  • 一、前言
  • 二、gateway网关
    • 1、什么是微服务网关?
    • 2、微服务架构下网关的重要性
      • 2.1、没有网关
      • 2.2、有网关
    • 3、gateway的功能
    • 4、gateway实战
      • 4.1、依赖配置
      • 4.2、添加网关配置
      • 4.3、添加网关启动类
      • 4.4、查看项目是否启动成功
      • 4.5、验证路由配置是否正确
  • 三、总结

一、前言

微服务架构已经成为现代软件开发的主流范式之一。它允许开发团队将复杂的应用程序拆分成小的、自治的服务单元,以便更容易进行开发、部署和维护。然而,随着微服务数量的增加,管理和维护这些服务变得越来越复杂。这时候,微服务网关就成了一个不可或缺的组件,用于提高可维护性、安全性和性能。

二、gateway网关

1、什么是微服务网关?

微服务网关是位于微服务架构和外部客户端之间的中间层。它充当了微服务体系结构的入口点,负责处理所有与客户端之间的通信。微服务网关有多个职责,包括路由请求、负载均衡、认证、授权、日志记录和安全性。它可以被看作是微服务架构的门卫,用于保护和管理微服务集群。
先看大家看一张图,展示一下我们的网关在我们项目中的位置,可以看到,网关处于我们整个项目中的核心位置,我们前端访问后端的所有请求都要通过gateway进行转发。
在这里插入图片描述

2、微服务架构下网关的重要性

2.1、没有网关

如果没有网关,在微服务的架构下,我们前端访问后端的所有微服务要通过不同的端口或者ip,以下图示为user、product、shop、order四个微服务部署在了一台虚拟机上,分别占用了不同的端口,如果前端要想访问后端所有的微服务的话,需要通过四个不同的端口进行访问。
在这里插入图片描述

2.2、有网关

如果我们使用了网关,同样是四个微服务,我们只需要通过访问gateway就可以访问所有的微服务了,这下是不是一下子就清楚了gateway在微服务架构下的重要性了。
在这里插入图片描述

3、gateway的功能

Spring Cloud Gateway 是一个用于构建微服务架构的反向代理和路由工具。

  • 路由(Routing):Spring Cloud Gateway 允许您定义路由规则,将传入的请求映射到不同的微服务实例上。路由规则通常基于请求的 URL 路径、请求头、HTTP 方法等条件进行定义。这使得您可以根据不同的请求,将它们定向到不同的后端微服务,实现动态的请求路由。

  • 请求过滤(Request Filtering):Gateway 提供了请求过滤器,允许您在请求到达后端微服务之前修改请求或执行特定操作。您可以使用这些过滤器来添加请求头、修改请求体、进行认证、请求限流、响应转换等。

  • 负载均衡(Load Balancing):Spring Cloud Gateway 集成了负载均衡功能,可以分发请求到多个后端微服务实例,以确保高可用性和性能。它支持多种负载均衡算法,如轮询、权重等,您可以根据需要进行配置。

  • 断路器(Circuit Breaker):Gateway 具有断路器模式,用于处理后端微服务的故障。当后端微服务不可用时,Gateway 可以快速切换到备用服务或返回友好的错误响应,而不是长时间等待超时。

  • 动态路由(Dynamic Routing):Gateway 支持动态路由,这意味着您可以在运行时添加、修改或删除路由规则,而不需要重新启动服务。这使得应对流量变化更加灵活。

  • 请求重试(Request Retry):Gateway 允许您配置请求重试机制,以应对后端微服务的瞬时故障。您可以定义重试的次数、间隔和条件,确保请求最终成功。

  • 限流(Rate Limiting):通过使用限流过滤器,Gateway 可以限制每个客户端或每个 IP 地址的请求速率。这有助于保护后端微服务免受过多的请求压力。

  • 集成安全性(Integration with Security):Gateway 可以与认证和授权系统集成,以确保只有授权的用户可以访问受保护的微服务。您可以使用 Spring Security 或其他安全框架来实现此功能。

  • 日志记录(Logging):Gateway 具有强大的请求和响应日志记录功能,这对于故障排除和监控非常有用。您可以配置日志级别和输出格式,以满足您的需求。

  • 监控和度量(Monitoring and Metrics):Gateway 可以集成监控和度量系统,例如 Spring Cloud Sleuth 和 Micrometer,以便实时监控流量和性能,并进行分析。

  • WebSocket 支持:Gateway 支持 WebSocket 协议,允许您处理实时的双向通信。

  • 自定义路由规则(Custom Routing Rules):Gateway 提供了丰富的扩展机制,允许您编写自定义的路由规则和过滤器,以满足特定需求。

4、gateway实战

4.1、依赖配置

引入相关依赖:SpringBoot、SpringCloud、SpringCloud gateway
先来看一下我的项目结构:
在这里插入图片描述

这里我们在父pom中引入SpringBoot和Spring Cloud的相关依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<!--版本管理-->
<properties>
    <java.version>11</java.version>
    <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
    <spring-cloud-alibaba.version>2.2.8.RELEASE</spring-cloud-alibaba.version>
</properties>

<!--依赖管理-->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

子pom中引入gateway的相关依赖,注意:gateway中不要引入springboot的web模块,因为gateway使用的web服务器是netty不是tomcat,而springboot的web模块中默认配置的web服务器就是tomcat

<!--gateway相关依赖-->
<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>
<!--nacos配置管理-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

4.2、添加网关配置

server:
  port: 9081
  servlet:
    context-path: /gateway-demo
spring:
  application:
    name: gateway-demo
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        namespace: wangmengjie
    gateway:
      globalcors:
        cors-configurations:
          '[/**]':
            allowedOrigins: "*"
            allowedHeaders: "*"
            allowedMethods: "*"
      default-filters:
        - DedupeResponseHeader=Vary Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRST
      discovery:
        locator:
          enable: true #让gateway可以发现nacos中的微服务
      routes: #路由,数组[这里可以放置多个路由]
        #评分管理模块网关路由配置
        - id: user-router #当前路由标识-要求唯一,默认是UUID;
          uri: lb://user-demo #请求最终要被转发的地址;
          order: 1 #路由的优先级——数字越小,代表路由的优先级越高
          predicates: #断言:(条件判断——转发请求要满足的条件)
            - Path=/user-service/** #当请求路径满族path指定的规则时,此路由信息才会正常转发;
          filters: #过滤器,是在请求传递过程中对请求做一些手脚;
            - StripPrefix=1 #在请求转发之前去掉一层路径

4.3、添加网关启动类

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableDiscoveryClient//开启nacos服务注册
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class,args);
    }
}

4.4、查看项目是否启动成功

项目启动成功
在这里插入图片描述
nacos服务注册成功
在这里插入图片描述

4.5、验证路由配置是否正确

通过网关的配置文件我们可以得知,user模块配置的断言为user-service/**,表明当我们访问localhost:9081/user-service/**的时候,请求就会发到我们的网关上面,然后gateway通过uri的配置,user-demo为user模块在nacos上注册的服务名称,在这里插入图片描述
user模块原有的接口地址:http://localhost:9000/user/getAllUser
访问网关的接口地址:http://localhost:9081/user-service/user/getAllUser
在网关的配置文件中filters的配置在进行请求转发之前会去掉第一层路径,也就是通过user-demo获取的user模块服务信息为:localhost:9000,再加上请求转发的路径,所以最终的请求为:localhost:9000/user/getAllUser;
在这里插入图片描述

三、总结

对于项目后台的微服务系统, 每一个微服务都不会直接暴露给用户来调用的, 如果用户知道了某一个服务的 ip:端口号:url:访问参数, 就能直接访问你,甚至是恶意访问等,因此需要一个网关作为微服务的统一入口。此篇文章先介绍网关的一些基本集成+使用,对于网关还有许多知识,跨域、过滤器、自定义过滤器、全局过滤器等,之后逐一为大家介绍。

如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。

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

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

相关文章

全网首发!大众宝来高尔夫polo领驭迈腾帕萨特奥迪A4A6B6B7等老车机增加带蓝牙控制的AUX解码模块,支持小程序原车按钮控制,支持外接高品质蓝牙模块

文章目录 前言1、设计指标2、PCB设计3、程序设计4、调试4.1蓝牙控制AUX解码板4.2自定义车机按钮控制其他高品质蓝牙音频模块4.3小程序使用 5、模块与车机连接方法6、结语 前言 ​ 之前写过四篇关于车机增加音频输入的方法。 1、07宝来经典车机CD收音机&#xff08;RC668&…

11.Redis数据库管理命令

Redis数据库管理命令 数据库管理selectdbsizeflushall / flushdb 数据库管理 redis 中的 database 是现成的&#xff0c;咱们用户不能创建新的数据库&#xff0c;也不能删除已有的数据库~ 默认 redis 给我们提供了 16 个数据库&#xff0c;名字为 数字0 到数字15 这16个数据库…

【深度学习】ChatGPT

本文基于Andrej Karpathy(OpenAI 联合创始人&#xff0c;曾担任特斯拉的人工智能和自动驾驶视觉主管)在Microsoft Build 2023上的演讲整理而成&#xff08;完整的视频在文末&#xff0c;直接拖到文章底部&#xff09;&#xff0c;主要分为2大部分&#xff1a; 1.如何训练GPT(可…

实战系列(一)| Dubbo和Spring Cloud的区别,包含代码详解

目录 1. 概述2. 核心功能3. 代码示例4. 适用场景 Dubbo 和 Spring Cloud 都是微服务架构中的重要框架&#xff0c;但它们的定位和关注点不同。Dubbo 是阿里巴巴开源的一个高性能、轻量级的 RPC 框架&#xff0c;主要用于构建微服务之间的服务治理。而 Spring Cloud 是基于 Spri…

3D开发工具HOOPS Publish如何快速创建交互式3D PDF文档?

HOOPS Publish是一款功能强大的SDK&#xff0c;可以创作丰富的工程数据并将模型文件导出为各种行业标准格式&#xff0c;包括PDF、STEP、JT和3MF。HOOPS Publish核心的3D数据模型是经过ISO认证的PRC格式(ISO 14739-1:2014)&#xff0c;它为装配树、拓扑和几何、产品制造信息和视…

基于grpc从零开始搭建一个准生产分布式应用(6) - 02 - MapStruct数据转换

一、基础转换 1.1、基础类型 基本类型、包装类、BigDecimal转String默认使用DecimalFormat格式化&#xff0c;Mapping#numberFormat可以指定格式&#xff0c;Date转String默认使用SimpleDateFormat格式化&#xff0c;如默认格式不符要求&#xff0c;可以用&#xff0c;Mapping…

华为OD机试 - 字符串分割(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、根据题意&#xff1a;2、例如&#xff1a;3、解题思路&#xff1a; 五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《…

温习下git同步本地代码至远程仓库

本地服务推远程git仓库&#xff1a; 1、远程git仓库或者云效服务创建服务名生产 ssh代码路径 2、进入本地项目文件夹git init 初始化git仓库 3、git remote add origin ssh(远程origin路径) 4、git add . 添加当前文件至暂存区 5、git commit -m "Initial commit"提交…

stable diffusion实践操作-安装

本文专门开一节写安装相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 正文 1、 秋葉一键安装包 github安装&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webui 秋叶安装&#xff1a;[b站教程和下载安装包…

按钮控件之1---QPushButton 标准按钮/普通按钮控件

1、父类QAbstractButton 2、QPushButton按钮&#xff0c;是Qt常用的控件之一&#xff0c;提供普通的按钮功能。 通过信号槽机制接收触发信号并执行对应动作。3、创建QPushButton 它有三个构造函数&#xff1a; // 空对象 QPushButton(QWidget *parent nullptr); // 指定QPus…

【Dots之008】TransformUsageFlags基础知识

一、基础介绍 在Baker中进行GetEntity对象的时候&#xff0c;需要填入TransformUsageFlags类型的参数&#xff1b;针对不同类型的参数&#xff0c;看看GameObject所转换后的IComponentData有什么差异&#xff1b; 演示代码&#xff1a; public class CubeAuthoring : MonoBe…

ITIL 4—创建、交付和支持—利用信息和技术创建、交付和支持服务

3.1 集成和数据共享 服务设计通常依赖于多个系统之间的集成&#xff08;integration&#xff09;&#xff0c;在这种情况下&#xff0c;理解集成建模的不同层次相当重要。例如&#xff1a; 应用程序级 应用程序之间是相互交互的。企业级 已集成的应用程序共同提供价值。业务…

计算机/嵌入式入门教材资料

背景 自学计算机&#xff0c;首先我们要找到好的教材、教程&#xff0c;可以事半功倍。 目前&#xff0c;互联网上计算机资源较多&#xff0c;难的不再是寻找资源&#xff0c;而是筛选出质量比较高的资源。 基于笔者经验&#xff0c;推荐以下资源。 书籍 传统的书籍是纸质版…

云存储:实现数据备份与恢复的创新方法

文章目录 云存储的基本概念数据备份的创新方法自动化备份策略增量备份和版本控制多地点备份 数据恢复的创新方法快速数据恢复弹性扩展性数据验证和一致性 案例分析&#xff1a;AWS S3自动化备份策略增量备份和版本控制多地点备份快速数据恢复数据验证和一致性 结论 &#x1f38…

不会还有人排长队吃饭吧?用这招,快速搞定!

随着现代企业对员工福利和工作环境的关注不断增加&#xff0c;企业智慧食堂已经成为了企业管理的重要组成部分。 智慧收银系统的出现不仅使员工用餐变得更加便捷和高效&#xff0c;还提供了一种强大的管理工具&#xff0c;有助于企业更好地理解员工消费行为、优化食堂运营&…

安卓10创建文件夹失败

最近在做拍照录像功能&#xff0c;已经有了文件读写权限&#xff0c;却发现在9.0手机上正常使用&#xff0c;但是在安卓12系统上根本没有创建文件夹。经过研究发现&#xff0c;创建名称为“DCIM”的文件夹可以&#xff0c;别的又都不行。而且是getExternalStorageDirectory和ge…

史上最细 B+Tree 解读

前言&#xff1a; BTree 经过几十年的发展已经成为 OLTP 数据库的首选索引结构&#xff0c;深入分析开始前先介绍一些书籍给大家&#xff0c;BTree 的演进非常的复杂&#xff0c;有很多的大牛论文都做出了很关键的指导性作用&#xff0c;就算当前还是在不断探索优化的可能&…

js实现图形验证码

图形验证码起什么作用&#xff1a; 可以防止&#xff1a;恶意破解密码、刷票、论坛灌水&#xff0c;有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试。 验证码一般是防止批量注册的&#xff0c;人眼看起来都费劲&#xff0c;何况是机器。不少…

让企业主们头疼的mkp勒索病毒,究竟有何来历,勒索病毒解密

mkp勒索病毒是一种比较常见的电脑病毒&#xff0c;它会对感染的电脑进行加密&#xff0c;并要求用户支付一定的赎金才能解锁。这种病毒已经引起了全球范围内的关注&#xff0c;因为它已经造成了严重的经济损失和电脑系统崩溃。 mkp勒索病毒是一种相对较新的病毒&#xff0c;但是…

【MySQL系列】索引的学习及理解

「前言」文章内容大致是MySQL索引的学习。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、索引概念二、从硬件角度理解2.1 磁盘2.2 结论 三、从软件角度理解四、共识五、索引的理解5.1 一个现象和结论5.2 对Page进行建模5.3 索引可以采用的数据结构5.…