微服务--Gateway网关

1. Gateway简介

        Gateway网关是微服务架构中不可或缺的组件,是微服务架构中的统一入口,它作为所有客户端请求的第一道防线,负责请求的路由、过滤和聚合。

Gateway核心功能

路由(Routing)

  • 根据请求路径、Header、参数等将请求路由到不同微服务

过滤(Filtering)

  • 前置过滤器:认证、鉴权、请求改写

  • 后置过滤器:响应改写、添加Header

负载均衡

  • 熔断降级

  • 集成Hystrix或Resilience4j实现熔断机制

限流

  • 基于Redis等实现分布式限流

2. 搭建网关服务

2.1 创建网关模块,导依赖

  • 创建模块

  • 启动类


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class,args);}
}
  • pom导入依赖

<?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="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>cloud-demo</artifactId><groupId>com.itgaohe</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>gateway-service</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties><dependencies><!--网关--><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><!--openfeign依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--负载均衡依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies></project>
  •  yml配置文件

server:port: 10010 # 网关端口
spring:application:name: gatewayservice # 服务名称cloud:nacos:server-addr: localhost:8848 # nacos地址discovery:username: nacospassword: nacosgateway:# 。。。globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题corsConfigurations:'[/**]':allowedOrigins: # 允许哪些网站的跨域请求- "http://127.0.0.1:8849"allowedMethods: # 允许的跨域ajax的请求方式- "GET"- "POST"- "DELETE"- "PUT"- "OPTIONS"allowedHeaders: "*" # 允许在请求中携带的头信息allowCredentials: true # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效期routes: # 网关路由配置- id: user-service # 路由id,自定义,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称predicates: # 路由断言,也就是判断请求是否符合路由规则的条件- Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求- id: order-service # 路由id,自定义,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://orderservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称predicates: # 路由断言,也就是判断请求是否符合路由规则的条件- Path=/order/** # 这个是按照路径匹配,只要以/user/开头就符合要求filters: #路由过滤器- AddRequestHeader=tou,itgaohe # 添加请求头 : 格式 k,vdefault-filters: # 默认过滤项- AddRequestHeader=tou2,itgaohe22 # 添加请求头

            Gateway网关搭建好之后,需要在服务生产者(order-service)设置拦截器,在网关服务的配置文件中配置全局拦截器,携带请求头,通过网关进行请求的话携带请求头,拦截器放行,如果请求不是从网关过来的,则不会携带强求头,拦截器会进行请求拦截

    2.2 拦截器

    • 定义网关拦截器

    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    import org.springframework.stereotype.Component;
    import org.springframework.web.servlet.HandlerInterceptor;/*** 网关拦截器,用于校验请求是否通过网关访问。*/
    @Component
    public class GateInterceptor implements HandlerInterceptor {/*** 在处理请求之前进行拦截操作。* * @param request  HTTP请求对象* @param response HTTP响应对象* @param handler  请求处理器* @return 如果校验通过返回true,否则返回false* @throws Exception 异常信息*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 设置响应内容类型和字符编码response.setContentType("html/text;charset=utf8");// 从请求头中获取"tou"字段的值String tou = request.getHeader("tou");// 校验"tou"字段是否为"itgaohe"if ("itgaohe".equals(tou)) {// 校验通过,继续后续处理return true;} else {// 校验未通过,设置错误状态码并返回提示信息response.setStatus(502);response.getWriter().write("没有通过网关访问");return false;}}
    }
    
    • 在核心配置中进行拦截器配置

    import com.itgaohe.order.interceptor.GateInterceptor;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
    public class WebConfig implements WebMvcConfigurer {@Autowiredprivate GateInterceptor gateInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(gateInterceptor).addPathPatterns("/**");}
    }
    

    3.跨域问题

    跨域问题的核心表现

    当以下任意一项不同时,就会触发跨域限制:

    • 协议不同(http vs https)

    • 域名不同(a.com vs b.com)

    • 端口不同(8080 vs 8081)

            Gateway解决跨域问题采用的是CORS方案,只需要在yml配置文件中进行配置就行

    # 。。。globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题corsConfigurations:'[/**]':allowedOrigins: # 允许哪些网站的跨域请求- "http://127.0.0.1:8849"allowedMethods: # 允许的跨域ajax的请求方式- "GET"- "POST"- "DELETE"- "PUT"- "OPTIONS"allowedHeaders: "*" # 允许在请求中携带的头信息allowCredentials: true # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效期

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

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

    相关文章

    区块链与人工智能的融合:从信任到智能的IT新引擎

    在信息技术&#xff08;IT&#xff09;的飞速发展中&#xff0c;两大颠覆性技术的交汇正掀起一场革命——区块链与人工智能&#xff08;AI&#xff09;的融合。2025年&#xff0c;随着数据隐私需求的激增、去中心化应用的爆发以及企业对可信智能系统的追求&#xff0c;区块链与…

    Javascript什么是原型和原型链,八股文

    原型:函数都有prototype属性,称之为原型&#xff0c;也称为原型对象 原型可以放一些属性和方法&#xff0c;共享给实例对象使用 原型可以做继承 原型链:对象都有__proto__属性,这个属性指向它的原型对象,原型对象也是对象,也有__proto__属性,指向原型对象的原型对象,这样一层一…

    生日悖论理论及在哈希函数碰撞中的应用

    目录 一、生日悖论&#xff08;Birthday Paradox&#xff09;介绍 二、生日悖论的数学解释 &#xff08;一&#xff09;计算所有人生日都不同的概率 数学推导 示例计算 &#xff08;二&#xff09;至少有两个人生日相同的概率 三、哈希函数碰撞与生日悖论的关系思考 &a…

    探索数据的力量:Elasticsearch中指定链表字段的统计查询记录

    目录 一、基本的数据结构说明 二、基本的统计记录 &#xff08;一&#xff09;统计当前索引中sellingProducts的所有类型 &#xff08;二&#xff09;检索指定文档中sellingProducts的数据总量 &#xff08;三&#xff09;检索指定文档中sellingProducts指定类型的数量统计…

    细节致胜:如何重塑反向海淘用户体验

    在反向海淘的激烈竞争中&#xff0c;客户体验已成为决定胜负的关键。一次流畅的购物旅程、一个贴心的服务细节&#xff0c;都可能让海外消费者成为品牌的忠实传播者。易境通代购商城系统正是以极致体验为核心&#xff0c;通过精细化服务管理&#xff0c;助力企业赢得用户口碑与…

    Docker 分阶段构建

    Docker 分阶段构建 Docker 分阶段构建&#xff08;Multi-stage Build&#xff09;是一种高效的镜像构建技术&#xff0c;允许在一个 Dockerfile 中使用多个构建阶段&#xff0c;每个阶段可以使用不同的基础镜像&#xff0c;最终只保留需要的文件&#xff0c;从而显著减小镜像体…

    人工智能学习23-BP-图像编码

    人工智能学习概述—快手视频 人工智能学习23-BP-图像编码—快手视频

    k8s的开篇学习和安装

    k8s的开篇学习 学习网站 参考资料 1。 K8S能干什么 [概述 | Kubernetes](https://kubernetes.io/zh-cn/docs/concepts/overview/#why-you-need-kubernetes-and-what-can-it-do)需要开代理 2。docker资料 https://docs.docker.com/get-started/3.prometheus资料 https://promet…

    CS144 lab0: warmup

    Lab 0: networking warmup 1. 环境 依赖配置 sudo apt update && sudo apt install git cmake gdb build-essential clang \clang-tidy clang-format gcc-doc pkg-config glibc-doc tcpdump tsharkg13配置 ppa中科大源 # deb https://ppa.launchpadcontent.net/ubu…

    StarRocks

    StarRocks 是一个高性能的 分布式 MPP(Massively Parallel Processing)数据库,主要用于 实时数据分析(Real-Time Analytics),是新一代的 OLAP 数据库,对标 ClickHouse、Apache Doris 等。 🌟 一、StarRocks 是什么? StarRocks 是一个面向实时分析场景、支持高并发、高…

    8088单板机8259中断的软件触发测试

    1.工作原理 8086和8088的中断设计的是很巧妙的&#xff0c;比如给8259的IR1配置了一个中断&#xff0c;中断号为21H&#xff0c;那么当真个引脚出现高电平的时候&#xff0c;就会触发相应上的中断响应。但&#xff0c;这不是唯一能够触发21H中断的方法&#xff0c;还可以通过软…

    TC3xx中PFLASH缓存对XCP标定常量的影响

    1、TC3xx中PFLASH缓存&#xff08;Cache&#xff09;对XCP标定的影响 XCP的映射用到TC3XX的Overlay功能需要使用一段Pflash内存。 Pflash数据有两个段区。分别为0x80000000和0xA0000000为起始地址的PFLASH段。 如上&#xff0c;两段数据的区别是一个段8有CACHE缓存&#xff0c;…

    代码审计服务:如何解决误报与漏报难题,保障软件安全?

    代码审计服务在保障软件质量、安全合规等方面扮演着关键角色&#xff0c;特别是在数字化浪潮席卷而来的今天&#xff0c;其重要性日益显著。它能揭露代码中的不足&#xff0c;进而为软件开发提供有力的效率和安全性保障。 误报与漏报难题 常规的代码审查工具&#xff0c;其错…

    web方向第一次考核内容

    一.考核内容 Web组大一下考核之HTML、CSS 1.为什么要清除浮动&#xff08;4)&#xff0c;清除浮动的方法有哪些&#xff1f;(6)&#xff08;至少两种&#xff09; 2.怎么实现左边左边宽度固定右边宽度自适应的布局&#xff1f;(10) 3.讲讲flex:1;(10) 4.怎么实现移动端适配不同…

    HarmonyOS 5 Cordova有哪些热门插件?

    以下是 HarmonyOS 5 环境下 Cordova 的热门插件及核心代码实现&#xff08;综合实际开发场景高频使用&#xff09;&#xff1a; 一、核心工具类插件 1. ‌高性能图片压缩插件‌ ‌功能‌&#xff1a;直接调用鸿蒙 ImageSource API 实现硬件级加速压缩 ‌代码实现‌&#xff…

    Cesium圆锥渐变色实现:融合顶点着色器、Canvas动态贴图与静态纹理的多方案整合

    在Cesium中渲染圆锥体时&#xff0c;无论采用顶点着色器、Canvas动态贴图还是静态图片贴图&#xff0c;其渐变色均需满足以下条件&#xff1a; 圆形结构&#xff1a;渐变范围限定在圆锥底面的圆形区域内。径向扩散&#xff1a;颜色从圆心向外逐步变化&#xff08;如红→黄→蓝…

    周末复习1

    质量管理包括质量规划&#xff0c;质量保证&#xff0c;质量控制。质量管理体系要定期执行内部审核和管理评审。二者都属于质量保证过程。 实施质量保证的方法很多&#xff0c;过程分析属于实施质量保证的常用方法。 采购管理过程包括编制采购计划,实施采购,控制采购和结束采购…

    英飞凌亮相SEMICON China 2025:以SiC、GaN技术引领低碳化与数字化未来

    在刚刚落幕的SEMICON China 2025上&#xff0c;全球半导体行业再度汇聚上海&#xff0c;共同探讨产业未来。本届展会以“跨界全球•心芯相联”为主题&#xff0c;覆盖芯片设计、制造、封测、设备及材料等全产业链&#xff0c;充分展现了半导体技术的最新突破与创新趋势。 作为…

    工业路由器赋能仓库消防预警,智慧消防物联网解决方案

    在现代物流与仓储行业蓬勃发展的当下&#xff0c;仓库的规模与存储密度不断攀升&#xff0c;消防预警的重要性愈发凸显。传统消防系统在应对复杂仓库环境时&#xff0c;预警滞后、设备联动不畅、数据管理困难等弊端逐渐暴露。为了有效解决这些问题&#xff0c;工业路由器作为物…

    【开发常用命令】:服务器与本地之间的数据传输

    服务器与本地之间的数据传输 本地给服务器上传数据 scp /path/to/local_file usernameremotehost:/path/to/remote_directory例如 scp test.txt root192.168.1.xxx:/test # test.txt 需要上传到服务器的文件&#xff0c;如果非当前路径&#xff0c;使用文件的相对路径或绝对…