不得不聊的微服务Gateway

一、 什么是Gateway?

1.网关的由来

单体应用拆分成多个服务后,对外需要一个统一入口,解耦客户端与内部服务

2.网关的作用

Spring Cloud Gateway是Spring Cloud生态系统中的一员,它被设计用于处理所有微服务的入口流量。作为一个反向代理,它不仅提供了负载均衡和路由功能,还支持灵活的过滤器机制,过滤器可以在请求进入网关和离开网关时执行,用于处理各种逻辑,如身份验证、日志记录和性能监测,使得开发者能够定制和扩展其功能。

网关功能

  • 身份认证和权限校验
  • 服务路由、负载均衡
  • 日志监控
  • 限流熔断

网关核心功能是路由转发,因此不要有耗时操作在网关上处理,让请求快速转发到后端服务上。 

3.Gateway 和 Nginx 的区别

Nginx主要作用是反向代理, 实现负载均衡, 负载均衡就是我们将项目部署到多个服务器上, 然后通过使用统一的域名去访问, 如通过 Nginx 对请求进行分发, 从而减轻服务器的压力,换句话说, Nginx 服务器起到了分发的作用, 但是真正的实现可以放在其他的服务器上, Nginx 作为隔离层, 也对我们项目起到了安全壁障. 那么 Gateway 和 Nginx 有什么区别呢?

首先要区分这两个概念先要区分流量网关业务网关的概念, Nginx 作为流量网关, 相当于访问的一个总入口, 也就是说我们会将所有的 html 页面放到 Nginx 的容器中, 从而起到流量的监控及日志的管理, 全局的限流等; 而业务网关则是针对具体的后端应用和服务, 也可以总结为 Nginx 主要配置在前端, 而 Gateway 则是配置在后端;
其次 Gateway 主要是利用路由, 断言及过滤器进行流量的控制等; Nginx 主要是负载均衡, 反向代理及当做 Web 服务器,虽然 Gateway 也有实现负载均衡的作用.
总之, Gateway 是前端工程到后端服务器之间的一个业务网关, 而 Nginx 是用户到前端工程的流量网关.

二、搭建一个简易网关服务

 1.引入依赖

<dependencies>
        <!--spring cloud 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>

      <!--客户端负载均衡loadbalancer,如果是通过负载均衡到其他服务,则需要引入-->
      <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-loadbalancer</artifactId>
     </dependency>

    </dependencies>

2.配置application.yml文件 

server:
  port: 8081 # 网关端口
spring:
  application:
    name: gateway # 服务名称
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848 # nacos地址
    gateway:
      routes: # 网关路由配置
        - id: baidu # 路由id, 自定义,唯一即可
          # uri: 127.0.0.1:/qb-service # - 路由目的地,支持lb和http两种
          uri: lb://qb-service # 路由的目的地,lb是负载均衡,后面跟服务名称
          predicates: # 路由断言,也就是判断是否符合路由规则的条件
            - Path=/qb/** # path 按照路径进行匹配,只要以/qb/开头就符合规则
          filters:
            - StripPrefix=1 # 过滤器,去除请求的前缀路径,StripPrefix=1 表示去除请求路径的第一个路径片段

网关路由流程:

4.断言工厂

1)Route:路由是网关的基本构件。它由ID、目标URI、路由断言工厂(谓语动词)和过滤器集合定义。如果断言工厂判断为真,则匹配路由
2)Predicate:路由断言工厂,参照Java8的新特性Predicate。这允许开发人员匹配HTTP请求中的任何内容,比如请求头或参数。
3)Filter:路由过滤器。可以在发送下游请求之前或之后修改请求和响应。
 

5.过滤器 

过滤器的作用
  • 对路由的请求或者响应做加工处理, 如上面的案例添加请求头;
  • filters: 配置在路由下的过滤器只对当前路由的请求生效, default-filters 则是对所有路由都生效.
过滤器种类
网关过滤器

可以自定义网关过滤器,定义方式是实现AbstractGatewayFilterFactory<>类。

默认过滤器

对所有的路由都生效

全局过滤器

全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。
区别在于GatewayFilter通过配置定义(即在 yml 中配置使用,处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现,即实现GlobalFilter接口。

具体实现步骤:

  • 实现 GlobalFilter 接口;
  • 添加 @Order 注解或者是实现 Ordered 接口;
  • 编写处理逻辑.

过滤器实现顺序

请求路由后, 会将三个路由器合并到一个过滤器中, 排序后一次进行执行, 如上图所示;

  • 每个过滤器都必须指定一个 int 类型的 order 值, order 值越小, 优先级越高, 执行顺序越靠前;
  • 全局过滤器实现 Ordered 接口或者添加 @Order 注解来执行 order 值, 由我们自己设定;
  • 路由过滤器和默认过滤器的 order 是由 Spring 来设定, 默认是按照声明的顺序从 1 递增;
  • 当过滤器的 order 值一样时, 会按照 defaultFilter > 路由过滤器 > 全局过滤器的顺序进行执行.

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

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

相关文章

志邦家居流程项目中心负责人郑瑶瑶受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 志邦家居股份有限公司流程项目中心负责人、战略及变革委员会秘书长郑瑶瑶女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“PMO在制造企业的标准化建设之路”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&…

社区智能奶柜:创业新机遇

社区智能奶柜&#xff1a;创业新机遇 在追求高质量生活的今天&#xff0c;健康食品成为大众焦点。社区智能奶柜适时登台&#xff0c;革新了居民获取新鲜牛奶的传统模式&#xff0c;为创业者开辟了一片蓝海市场。 一、新兴创业蓝海&#xff1a;牛奶随享站 日常膳食中&#xf…

【系统架构师】-UML-用例图(Use Case)

1、概述 用于表示系统功能需求&#xff0c;以及应用程序与用户或者与其他应用程序之间的交互关系。 2、组成 参与者&#xff08;Actors&#xff09;&#xff1a;与系统交互的用户或其他系统。用一个人形图标表示。用例&#xff08;Use Cases&#xff09;&#xff1a;系统需要…

sql查询数据语句

select * from 表名 where 列名 某个数据名字 查询某个表名中的某列是否有某个数据

孩子咳嗽,积食?可以试试宋乐冬医生分享的几个缓解方法~

最近气温变化大忽冷忽热&#xff0c;多变的天气容易引发儿童疾病。 不少妈妈也在后台咨询&#xff0c;想要学习一下常用的小儿推拿&#xff0c;在孩子身体出现轻微不适时&#xff0c;能够给孩子做做小儿推拿来辅助治疗&#xff0c;缓解不适恢复健康。 今天我们就一起学习一下&a…

视频剪辑图文实例:一键操作,轻松实现视频批量片头片尾减时

视频剪辑是现代媒体制作中不可或缺的一环&#xff0c;而批量处理视频更是许多专业人士和爱好者的常见需求。在剪辑过程中&#xff0c;调整视频的片头片尾时长可以显著提升视频的质量和观感。本文将通过图文实例的方式&#xff0c;向您展示如何一键操作&#xff0c;轻松实现视频…

Debian——安装syzkaller——2024

系统:Debian 远程连接——我是不想安装tools没有办法复制黏贴,所以远程,根据个人情况选择是否远程连接 就是说使用Windows自带的远程mstsc,使用的不是ssh22端口,是TCP 3389端口 mkdir debian cd debian 二:安装go编译器 打开终端。使用wget命令从官方网站或可信的镜像…

关于行内(块)元素vertical-align:middle;居中对齐

有时候 会发现 对行内元素或者行内块元素设置垂直居中vertical-align&#xff1a;middle&#xff1b;与不设置&#xff0c;没有什么变化 这是因为vertical-align不是作用于行内&#xff08;块&#xff09;元素自身&#xff0c;它是作用于其他行内&#xff08;块&#xff09;元素…

醛固酮(Aldosterone)/Aldosterone ELISA kit--比色竞争法酶免疫检测试剂盒

醛固酮&#xff08;Aldosterone&#xff09;是一种由肾上腺皮质中的胆固醇合成的类固醇激素。醛固酮在肾脏和肝脏中代谢&#xff0c;并作为控制钠钾平衡的关键盐皮质激素发挥作用。肾上腺合成和释放醛固酮主要受肾素-血管紧张素-醛固酮系统&#xff08;RAAS&#xff09;的调节&…

图纸管理的高效策略与最佳实践

图纸管理的高效策略与最佳实践 在工程设计、产品研发和建筑行业中&#xff0c;图纸管理是一项至关重要的任务。随着项目规模的扩大和复杂性的增加&#xff0c;如何高效、有序地管理图纸已成为企业和团队关注的焦点。本文将为您介绍图纸管理的高效策略与最佳实践&#xff0c;帮助…

检测机构的双资质是什么?

CMA和CNAS是两种在检测、校准和认证领域具有权威性的资质。 CMA资质全称为“检验检测机构资质认定”&#xff08;China Inspection Body and Laboratory Mandatory Approval&#xff09;。它是根据《中华人民共和国计量法》等相关法规&#xff0c;由国家认证认可监督管理委员会…

面试中算法(2的整数次幂)

判断一个正整数是否是2的整数次幂&#xff08;如16是2的4次方&#xff0c;返回true;18不是2的整数次幂&#xff0c;则返回false&#xff09;&#xff0c;要求性能尽可能高。 使用一个整型变量&#xff0c;让它从1开始不断乘以2&#xff0c;将每一次乘2的结果和 目标整数进行比较…

印尼本土电商平台Tokopedia和Akulaku如何高效上货?你需要EasyBoss ERP产品批量编辑功能

作为印尼本土电商平台&#xff0c;Tokopedia及Akulaku在印尼拥有相当大的用户群体&#xff0c;根据Similarweb数据显示&#xff0c;这两个电商平台分别占据谷歌及苹果应用下载榜的第三四名。对于有意布局印尼本土电商市场的中国卖家&#xff0c;Tokopedia或Akulaku都不失为一个…

50kw 直流充电桩测试仪的基础知识

直流充电桩测试仪是专门用于检测和测试直流充电桩性能的设备。它能够对充电桩的输出电压、电流、功率、效率等关键参数进行精确测量&#xff0c;以确保充电桩的正常运行和充电安全。 一、工作原理 直流充电桩测试仪主要通过模拟实际充电过程&#xff0c;对充电桩的各项性能进行…

共享WiFi项目加盟骗局:共享WiFi贴码收益真的月入过万?

如今每个人的手机都是智能手机&#xff0c;我们几乎随时随地都需要网络的陪伴。而随着共享经济的概念深入人心&#xff0c;一种名为“共享WiFi贴码”的新兴事物逐渐走入了我们的视线。据说通过这种方式&#xff0c;人们可以实现轻资产创业&#xff0c;甚至有人声称能借此达到月…

GreatSQL的sp中添加新的sp_instr引入的bug解析

GreatSQL的sp中添加新的sp_instr引入的bug解析 一、问题发现 在一次开发中用到的sp需要添加新的sp_instr以满足需求&#xff0c;但是添加了数个sp_instr以后发现执行新的sp会发生core。 注&#xff1a;本次使用的GreatSQL 8.0.32-25 1、sp_head.cc的init_sp_psi_keys()代码里…

阴影渲染在AI去衣技术中的关键作用

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;深度学习在图像处理领域取得了突破性的进展。其中&#xff0c;AI去衣技术作为一种高度复杂的图像到图像的转换过程&#xff0c;不仅要求算法能够精确地识别并处理衣物纹理和结构&#xff0c;还要求生成的结果具有高度的…

Java 【数据结构】 TreeSetTreeMap(二叉搜索树详解)【神装】

登神长阶 第八神装 TreeSet 第九神装 TreeMap 目录 &#x1f489; 一.二叉搜索树 &#x1fa78;1. 定义 &#x1f48a;2. 基本操作 &#x1fa79;3. 插入操作 &#x1fa7c;4. 查找操作 &#x1fa7a;5. 删除操作* &#x1fa7b;6. 遍历操作 &#x1fa92;7.性能分析 …

3D应用开发工具HOOPS与云计算:推动工程设计行业的数字化转型

关于云计算 在信息技术迅猛发展的今天&#xff0c;云计算已经成为企业进行数字化转型的重要推手。云计算通过互联网提供包括服务器、存储、数据库、网络、软件、分析和智能等在内的计算服务&#xff0c;这些服务通常以按需供应的方式提供&#xff0c;允许用户根据使用量进行付…

ansible——INVENTORY主机清单

一、Inventory主机清单 Inventory支持对主机进行分组&#xff0c;每个组内可以定义多个主机&#xff0c;每个主机都可以定义在任何一个或多个主机组内 二、Inventory主机清单部署 2.1 前期准备 systemctl stop firewalld setenforce 0 yum install epel-release -y yum install…