SpringCloud Gateway网关

文章目录

  • SpringCloud Gateway
    • 1.1 网关架构
    • 1.2微服务网关介绍
    • 1.3Spring Cloud Gateway(技术选型)
    • 1.4依赖
    • 1.5yaml配置(包含gateway相关配置,实现转发的功能)
    • 1.6断言案例:
    • 1.7断言详细介绍
    • 1.8 整合nacos
    • 1.9 nacos整合网关案例
    • 1.10动态路由

SpringCloud Gateway

1.1 网关架构

在这里插入图片描述

  • (dubbo+nacos)当前架构可以实现服务注册抓取,实现内部的功能调用,但是无法解决外部调用问题
    在这里插入图片描述

1.2微服务网关介绍

微服务网关是一个用于管理和监控微服务的入口,用于转发和路由来自客户端的请求。微服务网关可以将来自客户端的请求转发给后端的多个微服务,同时也可以处理跨域、身份验证、限流、缓存、流量控制等一系列与微服务相关的功能,从而简化了微服务架构的服务开发的复杂度。
总结网关功能,需求:

  • 集中管理:微服务很多,接口api也很多,所以通过网关为所有的微服务api接口提供统一管理维护的功能
  • 安全考虑:为了安全考虑,几乎绝大部分微服务都需要认证授权,和访问控制,网关可以提前完成这个任务,为微服务提供保障.
  • 流量控制限流:从网关层面对入口流量进行监控管理,一旦超出预计的请求数量,直接限制访问,防止后端微服务宕机.每一个微服务也要自行管理流量控制(sentinel)
    网关有多少中落地方案:
  1. Spring Cloud Gateway: Spring Cloud Gateway 是由 Spring Cloud 社区提供的一种基于 Spring 框架的全新微服务网关解决方案,它致力于为 Spring Boot 微服务应用提供简单、高效、可靠的路由服务。
  2. Netflix Zuul: Netflix Zuul 是一个轻量级的微服务网关,它能够为微服务应用提供负载均衡、路由、过滤等功能。Zuul 和 Eureka 之间的协作能够让 Zuul 帮助微服务应用自动处理负载均衡和服务发现。
  3. Kong: Kong 是一个企业级微服务 API 网关,它能够帮助开发者轻松创建、部署和管理微服务,同时提供灵活的路由、负载均衡、限流、监控、安全等功能。
  4. Istio: Istio 是一个开源的服务网格平台,它能够集成多种微服务网关、负载均衡、服务发现、流量控制等功能,以实现微服务之间的高效通信和流量管理。
  5. Nginx: Nginx 是一个轻量级的反向代理和负载均衡服务器,它可以充当微服务网关的角色。通过 Nginx 提供的路由和负载均衡功能,开发者可以为微服务提供一种快速、可靠的访问方式。
    在这里插入图片描述

1.3Spring Cloud Gateway(技术选型)

SSM框架有什么优势: 开源 热度高 使用方便 springboot简化配置 缺点简化配置 封装了原理和底层逻辑.难以学透.

一切技术选型都来自: 需求.

  1. 技术栈更加完善。

Spring Cloud Gateway 是基于 Spring Boot 和 Spring Cloud 构建的微服务网关,和 Spring Cloud Alibaba 等一些组件相结合可以构建完整的微服务架构体系。同时,它还支持集成 Spring Cloud Config、Spring Security、Spring Cloud Sleuth 和 Spring Cloud Stream 等组件,为微服务应用提供更加全面的技术支持。

  1. 高性能。

Spring Cloud Gateway 整合了 Reactor 和 Netty 技术,提供了高效的异步转发能力,支持 WebFlux 进行非阻塞式处理,避免了潜在的 I/O 瓶颈,提高了请求响应效率。

  1. 易于扩展和定制。

Spring cloud Gateway内置了很多现成的路由,负载均衡,过滤器的配置逻辑,易于上手使用。

同时提供扩展的接口,和非常简便的整合的配置方式,提供多种不同过滤器供开发者选择和使用。

1.4依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</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><!-- gateway: 网关核心依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency></dependencies>
  • 启动类(常规启动类)

1.5yaml配置(包含gateway相关配置,实现转发的功能)

server:port: 8099
spring:application:name: csmall-gateway#由于gateway底层不是tomcat 和mvc有冲突的main:web-application-type: reactive#配置cloud gateway 逻辑,实现转发需求cloud:gateway:#路由转发配置 路由逻辑可以配置多个routes:# 一个- 是一个路由信息,配置一个路由的对象属性# id表示唯一的标识- id: stock-redirect# 目的地请求地址uri: http://127.0.0.1:20003# 断言,assert,判断进入网关的请求,哪些符合这个路由匹配# 所有请求都到网关转发给stock# /** 匹配所有请求 ** 代表多级路径,且每一级都可以是任意长度字符串# ant匹配规范 * ? **predicates:- Path=/**- Host=localhost:8099

1.6断言案例:

predicates:- Path=/abc
  • 表示请求进入到网关的路径必须等于/abc 这个路由才处理
    http://localhost:8099/kaka访问
    网关接收请求,路由计算,没有路由匹配
    网关直接返回404

  • http://localhost:8099/abc访问
    网关接收请求,路由计算,匹配到id=stock-redirect路由
    转发 http://127.0.0.1:20003/abc
    stock处理请求,没有资源,返回404

predicates:- Path=/abc/*
  • http://localhost:8099/kaka–>网关返回404,没有路由匹配
  • http://localhost:8099/abc/aa–>stock返回404,stock接收资源路径/abc/aa,没有处理资源

1.7断言详细介绍

springCloud gateway 内置很多断言规则. Path Host使用的比较多的.
微服务做网关配置,做匹配的时候,2种情况的匹配.

  • Path路径,Host域名.
    在这里插入图片描述
    域名只有一个,请求路径可以以不同的服务约定的起始,做Path断言.
    在这里插入图片描述
  • 除了主域名,还有二级,三级域名,可以使用host区分转发访问的微服务功能.
  • 内置的Path Host以外还有一些断言可以使用,但是不太常用
  • After
    使用时间匹配路由,在指定时间之后的请求,才会匹配到.
  spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After=2017-01-20T17:42:47.789-07:00[America/Denver]
  • Before
    和After相反,在指定时间之前,才能匹配
spring:cloud:gateway:routes:- id: before_routeuri: https://example.orgpredicates:- Before=2017-01-20T17:42:47.789-07:00[America/Denver]
  • Between
    在两个时间点之间,才能匹配路由
spring:cloud:gateway:routes:- id: between_routeuri: https://example.orgpredicates:- Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]
  • Cookie
    使用cookie断言可以通过请求携带cookie值实现匹配的逻辑计算
spring:cloud:gateway:routes:- id: cookie_routeuri: https://example.orgpredicates:- Cookie=name,wanglaoshi

请求request 携带的cookie中 key1=value1;key2=value2 有没有name=wanglaoshi,有则匹配,没有则不匹配.

  • Method(案例中,要求request请求是get或者是post.)
    根据http请求,判断是否满足
spring:cloud:gateway:routes:- id: method_routeuri: https://example.orgpredicates:- Method=GET,POST
  • Path (通过路径匹配,/red/{segment} 变量, 匹配的判断和/red/*是一样的 )
spring:cloud:gateway:routes:- id: path_routeuri: https://example.orgpredicates:- Path=/red/{segment},/blue/{segment}
  • Query (请求参数中,必须有一个参数名叫做green)
    http://localhost:8099/doc.html?green=12321
    通过请求中的参数做断言
spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Query=green

支持正则表达式判断参数的值的格式 gree. 以gree开始 后面有一个字符. greet green

spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Query=red, gree.

上述案例要求 请求携带red参数,值满足 gree.正则

http://localhost:8099/doc.html?red=haha
http://localhost:8099/doc.html?red=green(√)

  • Remote
    根据请求 远程ip地址格式,判断匹配
spring:cloud:gateway:routes:- id: remoteaddr_routeuri: https://example.orgpredicates:- RemoteAddr=192.168.1.1/24

远程ip地址 192.168.1.100 √
远程ip地址 192.168.1.101 √
远程ip地址 192.168.2.101

  • Weight(同一分组的意思是,功能相同,路由指向的后端服务,功能完全一样的.按照8:2权重比例,分配请求.)
    权重断言,包含2个参数 - Weight=groupx,y,groupx表示分组x,y数字表示权重
spring:cloud:gateway:routes:- id: weight_highuri: https://weighthigh.orgpredicates:- Path=/**- Weight=group1, 8- id: weight_lowuri: https://weightlow.orgpredicates:- Path=/**- Weight=group1, 2

1.8 整合nacos

在这里插入图片描述

  • 如果实现nacos整合,网关整体进程就可以看成是一个nacos的客户端,启动时候抓取了服务信息.

  • 请求进入网关,网关的路由配置uri不再指向一个具体的服务实例地址,而是使用服务名称.

  • 断言匹配路由,进行路由计算之后,再进入负载均衡计算,从抓取的服务信息中,先获取信息实例集群,在计算负载逻辑.最终转发出去,由本次计算的实例处理请求.

  • 问题1: uri配置的服务名称找不到,配置错误,或者没抓到

  • 问题2: 请求资源在实例中不存在 404

1.9 nacos整合网关案例

  • 依赖(nacos-discovery)
  • 修改yaml配置(还是用stock测试)
server:port: 8099
spring:application:name: csmall-gateway#由于gateway底层不是tomcat 和mvc有冲突的main:web-application-type: reactive#配置cloud gateway 逻辑,实现转发需求cloud:nacos:#nacos中注册发现的功能discovery:#填写nacos的服务端地址server-addr: localhost:8848#命名空间namespace: f033ea8e-15ca-4f37-b112-127edc03de9e#分组group: 1.0gateway:#路由转发配置 路由逻辑可以配置多个routes:# 一个- 是一个路由信息,配置一个路由的对象属性# id表示唯一的标识- id: stock-redirect# 负载均衡的访问服务名称csmall-stockuri: lb://csmall-stock# 断言,assert,判断进入网关的请求,哪些符合这个路由匹配# 所有请求都到网关转发给stock# /** 匹配所有请求 ** 代表多级路径,且每一级都可以是任意长度字符串# ant匹配规范 * ? **predicates:- Path=/**- Host=localhost:8099
  • 修改uri 配置负载均衡的访问 csmall-stock服务.
  • 前提是网关要到对应的namespace和group,抓取csmall-stock.nacos也要配置
  • 请求流程分析过程:
    http://localhost:8099/doc.html --> 进入网关 --> 使用路由断言匹配 --> Path匹配 Host匹配 --> uri转发 --> lb://csmall-stock --> loadbalancer 获取nacos抓取信息 --> csmall-stock注册信息 127.0.0.1:20003 --> 负载均衡访问 --> http://127.0.0.1:20003/doc.html

1.10动态路由

server:port: 8099
spring:application:name: csmall-gateway#由于gateway底层不是tomcat 和mvc有冲突的main:web-application-type: reactive#配置cloud gateway 逻辑,实现转发需求cloud:nacos:#nacos中注册发现的功能discovery:#填写nacos的服务端地址server-addr: localhost:8848#命名空间namespace: f033ea8e-15ca-4f37-b112-127edc03de9e#分组group: 1.0gateway:#动态路由discovery:locator:enabled: true

spring.cloud.gateway.discovery.locator.enabled=true 属性值开启发现动态路由逻辑.

会根据抓取的服务名称,配置Path=/{服务名称}/** 同时转发的时候,将一级路径过滤掉

按照当前服务逻辑 相当于人为配置路由

routes:- id: stockuri: lb://csmall-stockpredicates:- Path=/csmall-stock/**filters:#会在转发时,去掉拼接的1级路径- StrimFilter = 1- id: carturi: lb://csmall-cartpredicates:- Path=/csmall-cart/**filters:#会在转发时,去掉拼接的1级路径- StrimFilter = 1

当前服务有2个,动态路由内部有2个路由配置.

http://localhost:8099/{服务名称}/{资源路径}.按照这个逻辑,以下几个演示案例,可以预测结果:

  1. http://localhost:8099/csmall-stock/doc.html --> 进入网关 -->匹配动态路由–>负载均衡计算–>拼接服务实例ip:port–>过滤掉一级路径 -->转发访问–> http://127.0.0.1:20003/doc.html
  2. http://localhost:8099/csmall-cart/doc.html --> 进入网关 --> 匹配动态路由–>负载均衡计算–>拼接服务实例ip:port–>过滤掉一级路径 -->转发访问–> http://127.0.0.1:20014/doc.html
  3. http://localhost:8099/csmall-stock/base/stock/reduce/count
    总结动态路由:
  • 访问网关
  • 访问网关的资源路径,第一级必须是服务名称
  • 除了服务名称剩下的路径,一定保证服务可以处理的请求

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

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

相关文章

HashSet 、LinkedHashSet 源码级详解

Set 集合类体系如下&#xff1a; HashSet -- 无序、不重复、无索引 LinkedHashSet -- 有序、不重复、无索引 TreeSet -- 可排序、不重复、无索引 HashSet HashSet 底层采用 哈希表 存储数据 哈希表组成 JDK8 之前 -- 数组 链表 JDK8 之后 -- 数组 链表 红黑树 一开始…

OpenVas扫描器更新扫描引擎

OPenvas扫描器安装时step1 是交换指导升级&#xff08;nvt&#xff0c;cert&#xff0c;scap&#xff09;&#xff0c;这次升级后是自动升级24h升级一次&#xff0c;但第一次升级时选择默认的rsync升级时会出现同步失败的问题&#xff0c;导致openvas安装完后有很大模块和规则不…

字符设备驱动开发(最初方式)

目录&#xff1a; 1.字符设备驱动简介2.字符设备驱动开发步骤2.1. 驱动模块的加载与卸载2.2. Makefile的编写2.3.字符设备的注册与注销2.3.1.设备号的组成2.3.2.设备号的分配 2.4.具体操作函数的实现2.4.1.进行打开和关闭操作2.4.2.对chrdev进行读写操作 3.具体程序的实现3.1.驱…

MySql如何卸载干净经验分享

第一步&#xff1a;首先打开注册表&#xff1a;点击电脑的开始按钮&#xff0c;打开找到运行&#xff0c;输入regedit&#xff0c;进入注册表&#xff1b; 第二步&#xff1a;删除mysql再注册表中的信息&#xff0c;以下三个目录&#xff1a; 1.HKEY_LOCAL_MACHINE\SYSTEM\Cont…

计讯物联5G千兆网关TG463在电力智能巡检机器人的应用功能解析

项目背景 随着国家智能电网建设加速推进&#xff0c;投资规模持续扩大&#xff0c;我国电网智能化、信息化不断提高&#xff0c;传统的电力运维与管理模式早已不能满足智能电网快速发展的需求。因此&#xff0c;在5G无线通信、人工智能、物联网、云计算、大数据、电力等前沿技术…

现货白银投资技巧有哪些

突破交易策略&#xff0c;适用于现货银价建立调整平台后&#xff0c;走势突然向上或向下运行的情况。所谓平台&#xff0c;就是是像箱子一样的矩形形态&#xff0c;即银价在两条水平直线之间上下波动&#xff0c;既上不去也下不来&#xff0c;一直在矩形内横向整理。这种形态通…

TCP 协议(五)异常报文

TCP 协议&#xff08;一&#xff09;报文结构 TCP 协议&#xff08;二&#xff09;连接与断开 TCP 协议&#xff08;三&#xff09;十种核心机制 TCP 协议&#xff08;四&#xff09;重传与超时 TCP 协议&#xff08;五&#xff09;异常报文 1.[TCP Dup ACK xxx#y]&#xff08…

关于Qt编译android时候一个问题

问题提示为 FAILURE: Build failed with an exception.* What went wrong: A problem occurred configuring root project android-build. > Could not resolve all artifacts for configuration :classpath.> Could not resolve com.android.tools.build:gradle:3.2.0.…

kafka消息队列最常用的两种模式,以及应用场景

目录 一、发布-订阅模式 二、点对点模式 三、应用场景 一、发布-订阅模式 发布-订阅模式是最常见的消息传递模式&#xff0c;其中消息发布者将消息发送到一个或多个主题&#xff08;Topic&#xff09;&#xff0c;而订阅者可以选择订阅一个或多个主题来接收消息。每个订阅者…

深入理解网络栈

网络路径 发送端 应用层 1、socket 各种网络应用程序基本上都是通过 Linux Socket 编程接口来和内核空间的网络协议栈通信的 socket 是网络编程的入口&#xff0c;它提供了大量的系统调用&#xff0c;构成了网络程序的主体 udp UDP 是面向无连接的协议&#xff0c;不需要与…

Linux的权限管理精细总结

&#xff08;该图由AI绘制 关注我 学习AI画图&#xff09; 目录 一、权限概述 1、权限的基本概念 2、为什么要设置权限 3、Linux用户身份类别 4、user文件拥有者 5、group文件所属组内用户 6、other其他用户 7、特殊用户root 二、普通权限管理 1、ls -l命令查看文件…

项目名称:无源在线词典项目

一&#xff0c;概述 基于C语言的网络电子词典项目&#xff0c;使用到了tcp协议的并发服务器设计、网络编程、文件I/O、数据库等多方面的知识。可以满足多用户同时登陆&#xff0c;用户登陆后可以查询单词及历史记录&#xff0c;具有查找快速&#xff0c;保密性好等优点。 开…