SpringCloud — 协同开发利器之动态路由

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

77f364f16376741c9bd70a8a0316eddc.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号等等功能:

  • Boot 地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 地址:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

来源:blog.csdn.net/m0_64360721
/article/details/125597943


介绍

不知道大家有没有在协同开发的过程中遇到这样的问题

好几个人同时开发同一个服务上的不同模块,导致你需要调试的接口总是被路由到别人的服务上,非常影响调试的效率,而且人越多越难受,总是请求不到自己的服务

如果只是自测还好,可以直接调用本地服务来避免这个问题,但是如果是和前端联调,前端又是统一请求的网关地址,那就有点麻烦了

所以我就想能不能在开发调试的时候,让某个接口路由到指定的服务呢?

于是我就实现了一个库来解决这个问题

传送门:https://github.com/Linyuzai/concept/wiki/Concept-Router

26c6323cce70681fb098ea44171cb388.png

通过可视化页面来配置接口路径对应的服务地址

比如我们先把所有的接口都统一路由到开发环境的服务上,然后将需要调试的模块接口路由到我们本地的服务上(路径匹配存在优先级,更精确的优先匹配)

这样我们既可以让调试的接口路由到我们自己的服务,也可以让其他的接口不路由到我们的服务,毕竟有的时候其他接口的日志可能会把我们的日志刷掉,对调试造成影响

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

集成

我把这个库做成零配置的方式,只需要引入相关依赖即可

implementation 'com.github.linyuzai:concept-router-spring-boot-starter:1.0.0'
<dependency>
  <groupId>com.github.linyuzai</groupId>
  <artifactId>concept-router-spring-boot-starter</artifactId>
  <version>1.0.0</version>
</dependency>

按需求给需要配置的项目添加依赖

  • 集成到网关(可以控制网关的转发)

  • 集成到服务(可以控制服务间调用)

目前支持的网关是Gateway,支持的服务间调用是Feign

主要是这两个组件感觉大家用的比较多,而像Zuul或是Dubbo如果有需求的人比较多的话可能会在之后进行补充

对于不同的Spring Cloud和Spring Boot版本也是有兼容的,所以大家不用担心版本适配问题

但是不能保证在某些版本中能完全兼容,比如像2.0.x和2.2.x的gateway代码

public class LoadBalancerClientFilter implements GlobalFilter, Ordered {
    //2.0.x的构造器
    public LoadBalancerClientFilter(LoadBalancerClient loadBalancer) {
        this.loadBalancer = loadBalancer;
    }
}

public class LoadBalancerClientFilter implements GlobalFilter, Ordered {

   //2.2.x的构造器
   public LoadBalancerClientFilter(LoadBalancerClient loadBalancer,
         LoadBalancerProperties properties) {
      this.loadBalancer = loadBalancer;
      this.properties = properties;
   }
}

不同版本间的一些代码差异可能会导致一些问题,因为低版本的LoadBalancerClientFilter真的是一个方法写到头,一点机会都不给只能重写覆盖了,不过其他的场景一般还是留了接口让我能够自定义插入一些逻辑的

目前经过测试的是2.0.x,2.2.x,2.6.x,如果大家在集成之后出现报错或是不生效的情况,可以联系我并提供Spring Cloud和Spring Boot版本就行了

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

配置

虽说可以零配置,不过也提供了一些配置可用于自定义

concept:
  router:
    enabled: true #是否启用路由功能
    logger:
      enabled: true #是否启用路由日志功能
    banner:
      enabled: true #是否输出Banner
    repository:
      type: local #路由数据存储类型,内存/本地文件
      local:
        path: /concept/router #本地文件的存储位置
    management:
      enabled: true #是否启用可视化页面

如果是线上环境的话大家可以通过concept.router.enabled=false来关闭功能,或者直接不把依赖打包进去

使用

当我们在项目中集成之后就可以通过{服务地址}/concept-router/index.html来访问可视化页面了,这里注意如果做了权限的话记得把/concept-router/**加入白名单

添加
8b83014a991ce8c5bfe23363e61ea5f2.png

路由有这几个参数

695d0acced0fe9e7596d44304a6cfc6e.png
快捷修改

提供了在列表上双击(匹配服务,匹配路径,服务地址)进行快速修改的功能

c106d5f521103c5bcb924099c100b1b6.png

这个是我写前端耗时最久的功能了,你们看看我为了你们的用户体验真是煞费苦心啊(暗示一键三连,不是。。。搞串了)

是否生效

那么怎么判断路由配置是否生效呢

在Gateway转发或Feign调用时输出Router >>前缀的日志就说明路由生效了


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,长按”或“扫描”下方二维码噢

148f932bd6aca8d51c3bb9af56f30d5b.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

874be1535b87a002208d69f7c63624d0.png

25b9b265adf8073b71b6f93083e5c12f.png9b17cd48a55e3c3d33cd31954bd18187.png9492821bfd3df208ff5eed88750361ce.pngd008508f1445f24a48601749affbece8.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值