Spring Cloud Gateway快速入门(四)——gateway最最重要的功能!Gateway如何实现的服务匹配

news2024/12/28 21:57:55

文章目录

  • 前言
  • 为什么要使用gateway进行服务的分配
    • 集中化的路由管理:
    • 动态路由的支持:
    • 请求过滤和处理:
    • 高性能和高可靠性:
  • 1. 介绍
  • 2. 服务匹配的概念
    • 2.1 路由规则
      • 2.1.1 Predicate(断言)
      • 2.1.2 Filter(过滤器)
    • 2.2 路由规则的配置
      • 2.2.1 配置文件方式
      • 2.2.2 编程方式
  • 3. gateway实现服务匹配核⼼的作⽤
  • 4. gateway工作的整体流程图
  • 5. 总结

前言

Gateway如何实现的服务匹配也gateway最重要的功能,也是通过前两篇文章过滤器和断言共同配合,完成了服务匹配的功能。

为什么要使用gateway进行服务的分配

集中化的路由管理:

Gateway作为一个统一的入口,可以集中管理和配置所有的服务路由规则。通过配置路由规则,可以将不同的请求路由到不同的后端服务,实现请求的分发和转发。这样可以避免在每个服务中都进行路由配置的繁琐和重复性工作。

动态路由的支持:

Gateway支持动态路由的配置,可以在运行时动态地添加、修改和删除路由规则。这样可以实现灵活的服务路由管理,无需重启网关服务即可生效。同时,动态路由的支持也方便了服务的动态扩展和迁移。

请求过滤和处理:

Gateway支持自定义的过滤器,可以对请求进行鉴权、转发、限流、重试等各种处理。通过过滤器的配置,可以对请求进行统一的处理和转换,减轻后端服务的负担。此外,Gateway还提供了一些内置的过滤器,如请求日志、请求转发等,方便开发者使用和扩展。

高性能和高可靠性:

Gateway基于Netty和Reactor等高性能的网络框架,具有高并发和低延迟的特点。同时,Gateway还支持负载均衡和熔断器等机制,可以提高服务的可靠性和稳定性。通过Gateway的服务分配功能,可以实现请求的快速响应和高可用性。

综上所述,使用Gateway进行服务的分配可以提供集中化的路由管理、动态路由的支持、请求过滤和处理的功能,同时还具有高性能和高可靠性的特点。这些优势使得Gateway成为微服务架构中重要的组件之一。

1. 介绍

Spring Cloud Gateway是一个基于Spring Framework 5,Spring Boot 2和Project Reactor的API网关。它旨在为微服务架构提供简单、有效和灵活的路由器和过滤器机制。其中,服务匹配是Gateway的核心功能之一。

2. 服务匹配的概念

服务匹配是指将进入网关的请求与后端的微服务进行匹配,以确定请求应该被路由到哪个微服务处理。在Gateway中,服务匹配是通过路由规则来实现的。

2.1 路由规则

路由规则定义了请求的匹配条件和目标服务的路由规则。它由两部分组成:Predicate(断言)Filter(过滤器)

2.1.1 Predicate(断言)

Predicate用于定义请求的匹配条件,包括请求的路径、请求的方法、请求的头等。只有当请求满足Predicate的条件时,才会进入该路由规则。

spring:
  cloud:
    gateway:
      routes:
        - id: service1_route
          uri: http://localhost:8081
          predicates:
            - Path=/service1/**

上述示例中,断言Path=/service1/**表示只有请求路径以/service1/开头的请求才会匹配到该路由规则。

2.1.2 Filter(过滤器)

Filter用于对请求进行处理和转换。它可以在请求被路由到目标服务之前或之后进行处理。Filter可以用于实现各种功能,如请求鉴权、请求转发、请求限流、请求重试等。

spring:
  cloud:
    gateway:
      routes:
        - id: service1_route
          uri: http://localhost:8081
          predicates:
            - Path=/service1/**
          filters:
            - StripPrefix=1

上述示例中,过滤器StripPrefix=1表示将请求的路径前缀去除1级,例如/service1/api会被转发到目标服务的路径为/api

2.2 路由规则的配置

路由规则的配置可以通过配置文件或者编程方式实现。

2.2.1 配置文件方式

在配置文件中添加路由规则的配置,如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: service1_route
          uri: http://localhost:8081
          predicates:
            - Path=/service1/**

上述示例中,配置了一个路由规则,将请求路径以/service1/开头的请求路由到http://localhost:8081

2.2.2 编程方式

通过编程方式配置路由规则,可以在启动类中添加@Bean注解的方法来创建RouteLocator实例,并配置路由规则,如下所示:

@Configuration
public class GatewayConfig {

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route("service1_route", r -> r.path("/service1/**")
                        .uri("http://localhost:8081"))
                .build();
    }
}

上述示例中,通过RouteLocatorBuilder创建了一个路由规则,将请求路径以/service1/开头的请求路由到http://localhost:8081

3. gateway实现服务匹配核⼼的作⽤

路由匹配:
在这里插入图片描述

4. gateway工作的整体流程图

在这里插入图片描述
客户端向 Spring Cloud GateWay发出请求,然后在 GateWay Handler Mapping 中找到与请求相匹配的路由,将其发送到GateWay Web Handler;Handler再通过指定的过滤器链来将请求发送到我们实际的服务执⾏业务逻辑,然后返回。过滤器之间⽤虚线分开是因为过滤器可能会在发送代理请求之前(pre)或者之后(post)执⾏业务逻辑。

Filter在“pre”类型过滤器中可以做参数校验、权限校验、流量监控、⽇志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改、⽇志的输出、流量监控等。
GateWay核⼼逻辑:路由转发+执⾏过滤器链。

5. 总结

通过路由规则的配置,Spring Cloud Gateway可以实现请求的服务匹配功能。通过断言和过滤器的配置,可以灵活地定义请求的匹配条件和处理逻辑。同时,Gateway还提供了一些内置的过滤器,方便开发者使用和扩展。通过Gateway的服务匹配功能,可以实现灵活的请求路由和请求处理,提升微服务架构的可扩展性和灵活性。

以上就是关于Gateway如何实现服务匹配的介绍,希望对你有所帮助!

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

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

相关文章

GC8837国产驱动芯片,可以替代TI的DRV8837C,具有 PWM(IN/IN)输入接口, 与行业标准器件兼容,并具有过温保护功能。

GC8837 是一款 12V 直流电机驱动芯片, 为摄像机、消费类产品、玩具和其他低压或 者电池供电的运动控制类应用提供了集成的 电机驱动解决方案。芯片一般用了驱动一个 直流电机或者使用两颗来驱动步进电机。可以工作在 0~12V 的电源电压 上,能提供高达 1.5…

OpenCV之油画特效

源码: # 读取图片 img cv2.imread("d:/img.jpg", 1) height, width, channels img.shape# 灰度图 gray_img cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 将图像分为8x8的多个小块,并统计小块每个像素的灰度值 # 划分灰度等级,例如…

手写实现简易Spring框架

该文章记录的是自己实现简易Spring框架的记录,简化了源码中的大量操作,没有实现三级缓存的机制。 其中将会对Component,ComponentScan,Scope,Autowired注解。BeanDefinition类以及ApplicationContext、BeanPostProcess…

C++中的 throw详解

在《C++异常处理》一节中,我们讲到了 C++ 异常处理的流程,具体为: 抛出(Throw)--> 检测(Try) --> 捕获(Catch) 异常必须显式地抛出,才能被检测和捕获到;如果没有显式的抛出,即使有异常也检测不到。在 C++ 中,我们使用 throw 关键字来显式地抛出异常,它的用…

【GAMES103】基于物理的计算机动画入门(1)前置的基础数学知识

GAMES103: 基于物理的计算机动画入门 链接:GAMES103 1. 坐标系的划分 在游戏引擎中分为右手和左手坐标系,区分的依据是什么? 上图可以看到如果是左手坐标系,那么所有的物体都在屏幕后面,意味着x,y&#x…

【Linux 之二】Ubuntu下开发环境的搭建(NFS \ SSH \ FTP \ Smba \ ...)

目前正在进行Linux相关项目的开发,而我的Linux开发是在Ubuntu(版本20.04)下进行的,为此需要搭建很多Linux相关的开发环境,方便工作的进行。这里主要是对各种开发环境的搭建做一个总结记录,方便后面查阅&…

彻底解决win11系统0x80070032

经过各种尝试,终于找到原因。第一个是电脑加密软件,第二个是需要的部分功能没有开启,第三个BIOS设置。个人觉得第三个不重要。 解决方法 笔记本型号 笔记本型号是Thinkpad T14 gen2。进入BIOS的按键是按住Enter键。 1、关闭山丽防水墙服务…

AI AIgents时代 - (四.) HuggingGPT MetaGPT

🟢 HuggingGPT HuggingGPT是一个多模型调用的 Agent 框架,利用 ChatGPT 作为任务规划器,根据每个模型的描述来选择 HuggingFace 平台上可用的模型,最后根据模型的执行结果生成总结性的响应。 这个项目目前已在 Github 上开源&am…

【暴力DP】CF1409 F

Problem - F - Codeforces 题意: 思路: 首先有个很明显的结论是:替换的字符一定是那两个字符之一 那么替换成哪个字符贡献更大不确定,因此考虑DP 因为有操作次数限制,直接把操作放进状态里 为了计算贡献&#xff…

Go语言高级特性解析与实践

1. 并发模型与goroutine Go语言以其强大的并发模型而闻名,它的核心机制是goroutine。goroutine是一种轻量级线程,由Go运行时负责调度。我们可以通过go关键字创建goroutine,而不需要像传统的线程编程那样关注底层的线程管理。 示例代码&…

Spring boot:解决@RequestBody失效问题:传入的实体类为NULL

1.问题描述 使用springboot写了一个controller类, 在使用postman测试用户注册功能的时候, 出现了传入实体类user,没有被读取的问题(即requestbody注解失效)。 2.解决方法 1.用户请求方式问题 在请求时&#xff0c…

ruoyi框架修改左侧菜单样式

菜单效果 ruoyi前端框架左侧的菜单很丑,我们需要修改一下样式,下面直接看效果。 修改代码 1、sidebar.scss .el-menu-item, .el-submenu__title {overflow: hidden !important;text-overflow: ellipsis !important;white-space: nowrap !important;//…

java框架-Springboot3-数据访问

整合SSM SpringSpringMVCMybatis 整合步骤 <?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:schemaLocation"…

k8s master 是如何进行pod的调度的

Master 节点将 Pod 调度到指定的 Node 节点的原理 该工作由 kube-scheduler 来完成&#xff0c;整个调度过程通过执行一些列复杂的算法最终为每个 Pod 计算出一个最佳的目标 Node&#xff0c;该过程由 kube-scheduler 进程自动完成。常见的有轮询调度&#xff08;RR&#xff09…

用HTML、CSS和JavaScript制作的通用进制转换器

随着编程和计算机科学越来越受欢迎&#xff0c;我们经常需要进行进制转换。本文将介绍一个简洁、美观、适用于移动设备的进制转换工具&#xff0c;并详细讨论其实现。 目录 &#x1f30d; 用HTML、CSS和JavaScript制作的通用进制转换器 1.项目图片展示 2. 技术栈 3. 主要功…

Unity Bolt模块间通信

使用Bolt无代码设计开发的时候&#xff0c;我们不能简单的认为只需要一个FlowMachine就可以完成所有流程的开发。我们需要不同的模块进行拆分&#xff0c;以便更好的管理和协作。这就需要不同模块之间的通信处理。经过研究与使用&#xff0c;将常用的通信方式总结如下&#xff…

React中setState的原理及深层理解

1.为什么使用setState React并没有实现类似于Vue2中的Object.defineProperty或者Vue3中的Proxy的方式来监听数据的变化 我们必须通过setState来告知React数据已经发生了变化 setState方法是从Component中继承过来的。 2.setState异步更新 setState设计为异步&#xff0c;可…

23. 图论 - 图的由来和构成

文章目录 图的由来图的构成Hi, 你好。我是茶桁。 从第一节课上到现在,我基本上把和人工智能相关的一些数学知识都教给大家了,终于来到我们人工智能数学的最后一个部分了,让我们从今天开始进入「图论」。 图论其实是一个比较有趣的领域,因为微积分其实更多的是对应连续型的…

【react】使用useEffect操作dom

简言 在学习react时&#xff0c;需要了一个需要在useEffect里操作dom的用法。 一般不推荐这么干&#xff0c;如果是函数组件在一渲染已挂载后立即需要操作dom绑定事件等可以参考下面解决方法。 描述 官网交错运动示例这个示例中&#xff0c;usePointerPosition() Hook 追踪当…

【前段基础入门之】=>初识 HTML

文章目录 前言HTML的详情简介HTML 发展史HTML 入门1. HTML 标签元素2. HTML标签属性3. HTML的标准结构 总结 前言 在整个前端开发中&#xff0c;必须掌握的技术栈为&#xff1a; HTML &#xff0c;CSS&#xff0c;JavaScript&#xff0c;它们三者&#xff0c;共同组成了前端开发…