微服务-gateway基本使用

文章目录

  • 一、前言
  • 二、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: 9081servlet:context-path: /gateway-demo
spring:application:name: gateway-democloud:nacos:discovery:server-addr: localhost:8848namespace: wangmengjiegateway:globalcors:cors-configurations:'[/**]':allowedOrigins: "*"allowedHeaders: "*"allowedMethods: "*"default-filters:- DedupeResponseHeader=Vary Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRSTdiscovery: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.rhkb.cn/news/126425.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设备管理系统的优势是什么?设备管理系统对企业运营管理有什么帮助?

传统的设备报修维护方式存在一些问题&#xff0c;例如指派传递速度慢和故障信息不准确等。然而&#xff0c;使用设备管理系统就可以轻松地解决这些问题&#xff0c;并且报修全流程只需短短的30秒。设备管理系统具有许多优势&#xff0c;首先它支持多种渠道的报修&#xff0c;包…

视频集中存储/直播点播平台EasyDSS点播文件分类功能新升级

视频推拉流EasyDSS视频直播点播平台&#xff0c;集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 TSINGSEE青犀视频的EasyDSS平台具有点播文件分类展示方法&#xf…

MojoTween:使用「Burst、Jobs、Collections、Mathematics」优化实现的Unity顶级「Tween动画引擎」

MojoTween是一个令人惊叹的Tween动画引擎&#xff0c;针对C#和Unity进行了高度优化&#xff0c;使用了Burst、Jobs、Collections、Mathematics等新技术编码。 MojoTween提供了一套完整的解决方案&#xff0c;将Tween动画应用于Unity Objects的各个方面&#xff0c;并可以通过E…

MySQL——索引

索引在 MySQL 数据库中分三类&#xff1a; B 树索引Hash 索引全文索引 目的&#xff1a;在查询的时候提升效率 b树 参考&#xff1a;https://blog.csdn.net/qq_40649503/article/details/115799935 数据库索引&#xff0c;是数据库管理系统中一个排序的数据结构&#xf…

Linux之Shell概述

目录 Linux之Shell概述 学习shell的原因 shell是什么 shell起源 查看当前系统支持的shell 查看当前系统默认shell Shell 概念 Shell 程序设计语言 Shell 也是一种脚本语言 用途 Shell脚本的基本元素 基本元素构成&#xff1a; Shell脚本中的注释和风格 Shell脚本编…

合宙Air724UG LuatOS-Air LVGL API控件-滑动条 (Slider)

滑动条 (Slider) 滑动条看起来和进度条是有些是有些像&#xff0c;但不同的是滑动条可以进行数值选择。 示例代码 -- 回调函数 slider_event_cb function(obj, event)if event lvgl.EVENT_VALUE_CHANGED then local val (lvgl.slider_get_value(obj) or "0")..&…

postgresql-常用日期函数

postgresql-常用日期函数 简介计算时间间隔获取时间中的信息截断日期/时间创建日期/时间获取系统时间时区转换 简介 PostgreSQL 提供了以下日期和时间运算的算术运算符。 获取当前系统时间 select current_date,current_time,current_timestamp ;-- 当前系统时间一周后的日…

C语言“牵手”拼多多商品详情数据方法,拼多多商品详情API接口,拼多多API申请指南

拼多多是中国最大的自营式电商企业&#xff0c;在线销售计算机、手机及其它数码产品、家电、汽车配件、服装与鞋类、奢侈品、家居与家庭用品、化妆品与其它个人护理用品、食品与营养品、书籍与其它媒体产品、母婴用品与玩具、体育与健身器材以及虚拟商品等。 拼多多平台的商品…

Linux之history、tab、alias、命令执行顺序、管道符以及exit

目录 Linux之history、tab、alias、命令执行顺序、管道符以及exit history历史命令 格式 参数 修改默认记录历史命令条数 案例 案例1 --- 显示history历史记录中出现次数最高的top10 案例2 --- 增加history显示的时间信息 命令与文件名补全 --- tab 命令别名 格式 案…

16 “count(*)“ 和 “count(1)“ 和 “count(field1)“ 的差异

前言 经常会有面试题看到这样的问题 “ select count(*) ”, “ select count(field1) ”, “ select count(1) ” 的效率差异啥的 然后 我们这里 就来探索一下 这个问题 我们这里从比较复杂的 select count(field1) 开始看, 因为 较为复杂的处理过程 会留一下一些关键的调试…

Briefings in Bioinformatics2021 | Bert-Protein+:基于Bert的抗菌肽识别

论文标题&#xff1a;A novel antibacterial peptide recognition algorithm based on BERT 论文地址&#xff1a;novel antibacterial peptide recognition algorithm based on BERT | Briefings in Bioinformatics | Oxford Academic 代码&#xff1a;https://github.com/B…

【笔记】大模型时代下做科研的四个思路 - 论文精读·52

视频地址&#xff1a;大模型时代下做科研的四个思路 相关大模型 CV: ViT(22B) , ViT-G(2B) from google 多模态&#xff1a;ViT-E(4B) from google NLP&#xff1a;LLaMA(70B,130B,330B,651B) from Meta 提问&#xff1a;在模型越来越大的时代背景下&#xff0c;如何利用有限…

Maven编译java及解决程序包org.apache.logging.log4j不存在问题

1、首先新建一个文件夹&#xff0c;比如hello Hello里新建pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

【网络编程】IO多路复用

IO多路复用是一种高效的I/O处理方式&#xff0c;它允许单个进程能够同时监视多个文件描述符&#xff08;sockets、文件等&#xff09;&#xff0c;并在其中任何一个文件描述符准备好进行I/O操作时进行处理。它的核心在于使用少量的线程或进程来管理多个I/O操作&#xff0c;以提…

BCSP-玄子Share-Java框基础_工厂模式/代理模式

三、设计模式 3.1 设计模式简介 软件设计中的三十六计是人们在长期的软件开发中的经验总结是对某些特定问题的经过实践检验的特定解决方法被广泛运用在 Java 框架技术中 3.1.1 设计模式的优点 设计模式是可复用的面向对象软件的基础可以更加简单方便地复用成功的设计和体系…

一维数组笔试题及其解析

Lei宝啊 &#xff1a;个人主页 愿所有美好不期而遇 前言&#xff1a; 数组名在寻常情况下表示首元素地址&#xff0c;但有两种情况例外&#xff1a; 1.sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小 2.&数组名&#xff0c;这里的…

方差分析的核心概念“方差分解“

方差是统计学中用来衡量数据集合中数值分散或离散程度的一种统计量。它表示了数据点与数据集合均值之间的差异程度&#xff0c;即数据的分散程度。方差越大&#xff0c;表示数据点更分散&#xff0c;而方差越小&#xff0c;表示数据点更集中。 方差的计算公式如下&#xff1a;…

Vue+NodeJS上传图片到腾讯云Cos

一.前端Vue 1.选择图片 --HTML <input type"file" accept"image/*" change"handleFileChange"> <el-button size"large" click"changeAvatar">上传头像</el-button> //选择图片 function handleFileC…

【杂】环形时钟配色笔记

配色网站笔记 coolorsflatuicolorscolordrophttps://www.webdesignrankings.com/resources/lolcolors/ 配色2

Unity中的场景加载

1、同步场景 2、异步加载 public class TestScenesLoad : MonoBehaviour {// Start is called before the first frame updatevoid Start(){StartCoroutine(Load());}// Update is called once per framevoid Update(){}private IEnumerator Load() { //异步加载&#xff0c;常…