当前位置: 首页 > news >正文

gateway 分发时若两个服务的路由地址一样,怎么指定访问想要的服务下的地址

1.思路

在使用Spring Cloud Gateway时,如果两个服务的路由地址相同,可以通过Predicate(断言)和Filter(过滤器)的组合来实现根据请求的不同条件将请求分发到不同的服务下的地址。

  1. 使用Predicate进行路由条件的判断

    • 在定义路由时,可以使用不同的Predicate来区分相同路由地址的不同服务。例如,可以根据请求的Header、参数或者路径来区分请求应该被路由到哪个服务。
  2. 使用Filter对请求进行重定向

    • 通过自定义Filter,可以根据请求的条件对请求进行重定向到不同的服务地址。在Filter中可以获取到请求的信息,并根据需要修改路由的目标地址。

2.在你的路由配置类中根据请求头跳转到不同的服务上

@Configuration
public class CustomRouteConfig {
//service1_route 是路由id,
//lb://service1 中的 service1服务名@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("service1_route", r -> r.path("/api/**").and().header("serviceName", "service1")//.filters(f -> f.rewritePath("/api/(?<segment>.*)", "/${segment}")).uri("lb://service1")).route("service2_route", r -> r.path("/api/**").and().header("serviceName", "service2")// .filters(f -> f.rewritePath("/api/(?<segment>.*)", "/${segment}")).uri("lb://service2")).build();}
}

在上面的例子中,我们定义了两个路由,它们的路径都是"/api/**",但是通过Predicate中的Header条件来区分应该路由到哪个服务。当请求的Header中包含"X-Service"并且值为"service1"时,请求将被路由到service1服务;当值为"service2"时,则被路由到service2服务。

3.vue前端:在全局的api方法中增加配置的服务名

#对接后台服务名
VITE_MY_SERVICE_NAME=service1

//动态配置请求头,找到对应的服务
const glob = useGlobSetting();
let serviceName= glob.myServiceName;
let MyHeaders={'serviceName': serviceName
};
if(config.headers==undefined){config.headers=MyHeaders;
}else{config.headers.serviceName = serviceName
}

相关文章:

  • Mysql-实战数据备份与恢复
  • 何时需要指定泛型:Scala编程指南
  • 如何使用python链表
  • Java基础知识总结(26)
  • linux debian运行pip报错ssl tsl module in Python is not available
  • ethers.js:sign(签名)
  • 【第十二届“泰迪杯”数据挖掘挑战赛】【2024泰迪杯】B题基于多模态特征融合的图像文本检索—解题全流程(持续更新)
  • 三极管工作方式
  • 音频干扰检测(频域方法)
  • 大学生创业基础(考试--绝密版)
  • 一些常见的ClickHouse问题和答案
  • buy me a btc 使用数字货币进行打赏赞助
  • vue3+ts白屏问题解决
  • 【计算机网络】第三章 数据链路层(虚拟机与局域网)
  • python实战之PyQt5桌面软件
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • CSS盒模型深入
  • Django 博客开发教程 16 - 统计文章阅读量
  • HashMap ConcurrentHashMap
  • laravel 用artisan创建自己的模板
  • Markdown 语法简单说明
  • ReactNative开发常用的三方模块
  • scrapy学习之路4(itemloder的使用)
  • Vue 动态创建 component
  • vue.js框架原理浅析
  • WebSocket使用
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 工作手记之html2canvas使用概述
  • 基于axios的vue插件,让http请求更简单
  • 简单数学运算程序(不定期更新)
  • 开发基于以太坊智能合约的DApp
  • 使用Gradle第一次构建Java程序
  • 算法---两个栈实现一个队列
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 推荐一个React的管理后台框架
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 微信小程序实战练习(仿五洲到家微信版)
  • 详解移动APP与web APP的区别
  • 怎么将电脑中的声音录制成WAV格式
  • 主流的CSS水平和垂直居中技术大全
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​iOS安全加固方法及实现
  • #QT(TCP网络编程-服务端)
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • %check_box% in rails :coditions={:has_many , :through}
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (day6) 319. 灯泡开关
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)spring boot火车票售卖系统 毕业设计 211004