微服务-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.hqwc.cn/news/99647.html

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

相关文章

报错:axios发送的所有请求都是404

axios发送的所有请求都是404 一、问题二、分析三、解决一、问题 对后台发送数据请求接口,在 Swagger 上是可以请求到的 但是通过 Ajax 发送请求就会报 404 Swagger 上调用如下 项目接口请求如下

react16之前diff算法的理解和总结

此篇文章所讨论的是 React 16 以前的 Diff 算法。而 React 16 启用了全新的架构 Fiber&#xff0c;相应的 Diff 算法也有所改变&#xff0c;本片不详细讨论Fiber。 fiber架构是为了支持react进行可中断渲染&#xff0c;降低卡顿&#xff0c;提升流畅度。 react16之前的版本&…

二、C#—第一个c#程序(2)

&#x1f33b;&#x1f33b; 目录 一、编写第一个C#程序1.1 使用Visual Studio创建c#程序的步骤1.2 编写第一个程序“Hello Word”1.3 c#程序的基本结构1.3.1 c#中的命名空间1.3.2 c#中的类1.3.3 c#中的程序启动器——Main方法1.3.4 c#中的标识符1.3.5 c#中的关键字1.3.6 c#中的…

Java-HashMap中put()方法是如何实现的,内含详细流程图

文章目录 Java中的HashMap什么是HashMap&#xff1f;对比其他Map中put()方法HashMap中put()方法使用示例 HashMap中put()源码解析手绘流程图实现原理源码探究&#xff08;JDK 1.8&#xff09; 设计put()的意义总结 Java中的HashMap 什么是HashMap&#xff1f; HashMap是Java中…

linux并发服务器 —— 多进程并发 - 进程间的通信及实践(五)

进程间的通信 进程是一个独立的资源分配单元&#xff0c;不能在一个进程中直接访问另一个进程的资源&#xff1b; 进程间通信&#xff08;IPC&#xff09;的目的&#xff1a; 1. 数据传输 - A进程发送数据给B进程 2. 通知事件 - eg. 进程终止通知父进程 3. 资源共享 - 多个…

打包个七夕exe玩玩

前段时间七夕 当别的哥们都在酒店不要不要的时候 身为程序员的我 还在单位群收到收到 正好后来看到大佬些的这个 https://www.52pojie.cn/thread-1823963-1-1.html 这个贱 我必须要犯&#xff0c;可是我也不能直接给他装个python吧 多麻烦 就这几个弹窗 好low 加上bgm 再打包成…

解决Maven依赖下载问题:从阿里云公共仓库入手

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

CSS学习笔记03

CSS笔记03 盒子模型 什么是盒子模型 概念&#xff1a; CSS 盒子模型就是在网页设计中经常用到的一种思维模型&#xff0c;是 CSS 布局的基石&#xff0c;主要规定了元素是如何显示的以及元素间的相互关系。定义所有元素都可以有像盒子一样的平面空间和外形。包含内容区、内边…

如何建设一个安全运营中心(SOC)?

然信息安全管理问题主要是个从上而下的问题&#xff0c;不能指望通过某一种工具来解决&#xff0c;但良好的安全技术基础架构能有效的推动和保障信息安全管理。随着国内行业IT应用度和信息安全管理水平的不断提高&#xff0c;企业对于安全管理的配套设施如安全运营中心&#xf…

招投标系统简介 企业电子招投标采购系统源码之电子招投标系统 —降低企业采购成本

​功能模块&#xff1a; 待办消息&#xff0c;招标公告&#xff0c;中标公告&#xff0c;信息发布 描述&#xff1a; 全过程数字化采购管理&#xff0c;打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力&#xff0c;为外…

【图解RabbitMQ-3】消息队列RabbitMQ介绍及核心流程

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…

智汇云舟亮相2023服贸会,全面展示视频孪生技术与产品

9月2日-6日&#xff0c;为期5天的2023年中国国际服务贸易交易会&#xff08;以下简称&#xff1a;服贸会&#xff09;在北京首钢园举办。在电信、计算机和信息服务专题展馆中&#xff0c;智汇云舟有幸作为北京市专精特新和数字孪生企业优秀代表受邀参展&#xff0c;并携视频孪生…