Gateway网关

网关GateWay

官方文档:https://docs.spring.io/spring-cloud-gateway/docs/3.1.2/reference/html/#gateway-how-it-works

核心概念

  • 路由: 网关的核心数据结构,定义了网关如何处理请求. 一条路由信息包含路由的唯一标识ID,目的地URI, 一组断言(用于判断当前请求是否匹配这条路由信息), 以及一组过滤器组成. 当网关收到一个请求时,如果某条路由信息的所有断言都为真,那么改请求匹配这条路由,会被发往改路由的目的uri。
  • 断言: 可以根据Http请求的路径,请求头或者请求参数对于一个请求进行路由匹配判断。
  • 过滤器: 当请求匹配上某个路由信息时,由配置的过滤器依次处理。

网关节点搭建

引入依赖

<dependencies><!--   引入nacos 注册中心依赖  注册服务   --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
<!--    gateway网关的依赖,注意,不要引用 starter-web依赖,否则启动报错    --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>
<!--     这个依赖可以查看网关的路由信息   --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency></dependencies>

启动类

package com.qf.gateway;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication
@EnableDiscoveryClient
public class GateWayApp {public static void main(String[] args) {SpringApplication.run(GateWayApp.class,args);}
}

配置文件

server:port: 80
spring:application:             #这是注册在注册中心的服务名name: service-gatewaycloud:nacos:discovery:   #注册中心的地址server-addr: 127.0.0.1:8848gateway:# 打开如下配置,自动发现 Nacos 注册中心的服务,并自动生成路由信息discovery:locator:enabled: truelower-case-service-id: true  # 让网关自动生成的服务名为小写routes:- id: aa# 断言的作用,判断网关收到的请求是否匹配当前的路由信息predicates:- Path=/pro/**filters:  # 重写Url 去掉pro- RewritePath=/pro/?(?<segment>.*), /$\{segment}uri: lb://service-provide  #lb代表 负载均衡  写服务名- id: ss# 断言的作用,判断网关收到的请求是否匹配当前的路由信息predicates:- Path=/sss/**filters:- RewritePath=/sss/?(?<segment>.*), /$\{segment}uri: http://localhost:8081/- id: baidu# 断言的作用,判断网关收到的请求是否匹配当前的路由信息predicates:- Path=/baidu/jmj/lll/**filters:# 去掉前缀几个 /**- StripPrefix=3uri: http://www.baidu.com#开启 监控功能#开启 监控功能  http://localhost/actuator/gateway/routes
management:endpoints:enabled-by-default: true #暴露所有端点信息web:exposure:include: '*'  #以web方式暴露

查看路由信息

http://localhost/actuator/gateway/routes

手动添加路由信息

spring:cloud:gateway:routes:- id: baidu# 断言的作用,判断网关收到的请求是否匹配当前的路由信息 predicates:- Path=/**uri: http://www.baidu.com

尝试发送如下请求,并观察响应结果

http://localhost/s?wd=onepiece

添加路由信息到内部微服务

将路径/sss的请求发送给micro1微服务处理

spring:cloud:gateway:routes:- id: micro1predicates:- Path=/sss/**uri: http://localhost:9100/- id: baidupredicates:- Path=/**uri: http://www.baidu.com

在这里插入图片描述

错误原因分析,在micro1节点观察日志,请求路径为 /sss/test1。

在这里插入图片描述

解决办法:使用gateway提供的URL重写功能。配置url重写过滤器。

URL重写

当断言为true时,gateway会把当前请求路径完整的发送给后端uri,因此需要特别注意后端实际的接口地址是否匹配。

例如,后端真实接口地址为:http://localhost:8900/test1

那么,gateway真正转发给后端的请求为http://localhost:8900/sss/test1。

如果需要,可以重写发送给后端接口的真实uri路径。代码如下:

当匹配sss路径的请求发送给网关时,真正转发的路径去掉了sss,仅仅保留后面的路径信息

spring:cloud:gateway:routes:- id: micro1predicates:- Path=/sss/**filters:- RewritePath=/sss/?(?<segment>.*), /$\{segment}uri: http://localhost:9100/- id: baidupredicates:- Path=/**uri: http://www.baidu.com

或者使用内置过滤器实现URL重写

spring:cloud:gateway:routes:- id: baidupredicates:- Path=/baidu/**# 内置过滤器 StripPrefix,可以去掉Path中的前n个前缀(n为StripPrefix配置的值) filters:- StripPrefix=1uri: http://www.baidu.com

负载均衡调用内部微服务

uri: lb://micro1 , 双斜线后面写微服务的名称

spring:application:name: gatewaycloud:gateway:routes:- id: micro1predicates:- Path=/sss/**filters:- RewritePath=/sss/?(?<segment>.*), /$\{segment}uri: lb://micro1

整合Nacos自动生成微服务路由信息

注意:如果gateway想要自动生成eureka中注册服务的路由信息,需要开启如下配置:

spring:cloud:gateway:# 打开如下配置,自动发现eureka注册中心的服务,并自动生成路由信息      discovery:locator:enabled: true lower-case-service-id: true  # 让网关自动生成的服务名为小写

http://localhost/actuator/gateway/routes

断言配置

spring:cloud:gateway:routes:- id: searchuri: lb://micro1  #服务名predicates:- Path=/sss/**- After=2022-01-20T17:42:47.789-07:00[America/Denver] # 还有一个Before - Cookie=chocolate, ch.p   #cookie  chocolate=chop- Header=X-Request-Id, \d+  # 请求头里   X-Request-Id= 1-任意个(0-9)的整数filters:- RewritePath=/sss/?(?<segment>.*), /$\{segment}

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

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

相关文章

融云 CallPlus + X,通话场景一站式解决方案

融云近期上线的 CallPlus SDK&#xff0c;针对音视频呼叫场景单独设计后端服务 Call Server&#xff0c;信令延时低至 150ms&#xff0c;确保各端计时准确、一致&#xff1b;上线了音视频通话互转、灵活的多人通话、通话记录管理能力等功能。关注【融云全球互联网通信云】了解更…

regsvr32 initpki.dll找不到指定模块要怎么解决?教你快速修复initpki.dll文件

当你尝试在 Windows 操作系统中注册 DLL 文件时&#xff0c;可能会遇到错误消息&#xff1a;“regsvr32 initpki.dll找不到指定模块”。它通常是由于一个或多个 DLL 文件缺失或损坏所导致的。这是一个常见的错误&#xff0c;并且可以遇到在 Windows 7、Windows 8 和 Windows 10…

点餐小程序的制作流程详解

随着移动互联网的发展&#xff0c;越来越多的消费者开始使用手机进行点餐&#xff0c;这也促使了点餐小程序的兴起。如果您是一位商家&#xff0c;想要开发一个属于自己的点餐小程序&#xff0c;那么不妨尝试一下以下的DIY教程吧&#xff01; 首先&#xff0c;我们需要找一个专…

Android存储权限完美适配(Android11及以上适配)

一、Bug简述 一个很普通的需求&#xff0c;需要下载图片到本地&#xff0c;我的三个测试机&#xff08;荣耀Android10&#xff0c;红米 11 和小米Android 13都没有问题&#xff09;。 然后&#xff0c;主角登场了&#xff0c;测试的三星Android 13 死活拉不起存储权限弹窗。 …

【文件操作——详细讲解】

1. 为什么使用文件&#xff1f;&#x1f9d0; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数…

H3C ER G2系列路由器敏感信息泄露漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、产品介绍 H3C ER2200G2是H3C推出的新一代高性能企业级路由器&#…

NPDP证书,为什么这么多人考?

NPDP证书至2016年引进国内&#xff0c;考试人数就持续增长&#xff0c;不仅是新产品开发唯一 的职业证书&#xff0c;在产品管理这一领域的知名度也在前列&#xff0c;那么这个证书的作用在哪里呢&#xff1f; 想考npdp证书&#xff0c;npdp干货可下载&#xff1a; 1、就业范围…

腾讯云最新优惠活动有哪些?活动入口在哪里?

腾讯云作为国内知名的云计算服务提供商&#xff0c;为了吸引用户&#xff0c;经常推出各种优惠活动。以下是近期腾讯云的一些优惠活动及其入口&#xff1a; 一、腾讯云新用户优惠券【点此领取】 腾讯云新用户专属大礼包&#xff0c;无门槛领取总价值高达2860元代金券&#xff…

手把手教你,细说向开源项目递交代码的流程

系列文章目录 手把手教你安装Git&#xff0c;萌新迈向专业的必备一步 GIT命令只会抄却不理解&#xff1f;看完原理才能事半功倍&#xff01; 常用GIT命令详解&#xff0c;手把手让你登堂入室 GIT实战篇&#xff0c;教你如何使用GIT可视化工具 GIT使用需知&#xff0c;哪些操作…

亚信科技AntDB数据库 高并发、低延迟、无死锁,深入了解AntDB-M元数据锁的实现

AntDB-M在架构上分为两层&#xff0c;服务层和存储引擎层。元数据的并发管理集中在服务层&#xff0c;数据的存储访问在存储引擎层。为了保证DDL操作与DML操作之间的一致性&#xff0c;引入了元数据锁&#xff08;MDL&#xff09;。 AntDB-M提供了丰富的元数据锁功能&#xff0…

c语言-实用调试技巧

什么是bug&#xff1f; 程序中出现的问题 调试是什么&#xff1f;有多重要&#xff1f; 测试的基本步骤&#xff1a;发现程序错误的存在 以隔离、消除等方式对错误进行定位&#xff0c;确定错误产生的原因&#xff0c;提出纠正错误的解决办法&#xff0c;对程序错误予以改正…

云原生之使用Docker部署RSS阅读器Huntly

云原生之使用Docker部署RSS阅读器Huntly 一、Huntly介绍1.1 Huntly简介1.2 Huntly功能2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Huntly镜像五、部署Huntly5.1 创建挂载目录5.2 创建Hun…

气导耳机是什么样的?盘点五款好用的气传导耳机分享

​气传导耳机在运动、户外、办公等场景中具有独特的优势。然而&#xff0c;面对市场上琳琅满目的气传导耳机产品&#xff0c;很多用户不知如何下手。接下来&#xff0c;我将推荐市面上热销火爆&#xff0c;并性能出色、性价比高的气传导耳机给大家&#xff0c;希望大家都能选到…

GMAC接口(5)——LWIP移植

1.LWIP源码下载 官网&#xff1a;https://savannah.nongnu.org/projects/lwip/ 版本&#xff1a;lwip-2.2.0 2.移植 2.1LWIP目录 2.1.1.porttable目录 2.1.1.1.cc.h #ifndef CC_H_ #define CC_H_#define SYS_ARCH_DECL_PROTECT(lev) #define SYS_ARCH_PROTECT(lev) #def…

面试必杀技:Jmeter性能测试攻略大全(第三弹)(脚本开发)

今天是最后一章哦&#xff0c;主要是讲jmeter性能测试脚本相关的。原创不易&#xff0c;点个赞意思一下呗&#xff01; 一. 脚本开发方式大纲 1、badboy进行录制和导出 badboy下载地址: 链接&#xff1a;https://pan.baidu.com/s/18Po3RssrBRSnn_-xsHop1g 提取码&#xff1…

Linux计划任务

at 参数 日期时间&#xff1a;指定任务执行的日期时间。 在指定时间执行一个任务 -f&#xff1a;指定包含具体指令的任务文件&#xff1b; -q&#xff1a;指定新任务的队列名称&#xff1b; -l&#xff1a;显示待执行任务的列表&#xff1b; -d&#xff1a;删除指定的待执行…

Simulink 封装

快捷键&#xff1a; Edit Mask&#xff1a;CtrlM Look Under Mask&#xff1a;CtrlU 封装之后的模型&#xff1a; Edit Mask界面&#xff1a; 双击模块后的提示界面&#xff1a; 封装的模块内部&#xff1a;

【响应式布局】

响应式布局 1 什么是响应式布局2 响应式布局的5种实现方案2.1 百分比布局2.2 媒体查询布局2.3 rem响应式布局2.4 vw / vh响应式布局2.5 flex弹性布局 1 什么是响应式布局 响应式布局就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这个概念是为解决移动互…

完全背包 动态规划 + 一维dp数组

动态规划&#xff1a;完全背包理论基础 每件商品都有无限个&#xff01;&#xff01;&#xff01; &#xff08;1&#xff09;0-1背包的核心代码 解决0-1背包问题&#xff08;方案二&#xff09;&#xff1a;一维dp数组&#xff08;滚动数组&#xff09;_呵呵哒(&#xffe3;…

【.net core】使用nssm发布WEB项目

nssm下载地址&#xff1a;NSSM - the Non-Sucking Service Manager 配置方式 修改服务在nssm工具下输入命令:nssm edit jntyjr 其中 jntyjr为添加服务时设置的Service name nssm可以设置任何以参数启动的应用程序以服务形式启动,通过设置参数内容启动服务 以上配置等同于执行…