⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/m0_64360721/article/details/125597943 「代码峡谷孙膑」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

介绍

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

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

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

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

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

❝

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

❞

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

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

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

集成

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

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版本就行了

配置

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

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/**加入白名单

添加

路由有这几个参数

快捷修改

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

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

是否生效

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

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

文章目录
  1. 1. 介绍
  2. 2. 集成
  3. 3. 配置
  4. 4. 使用
    1. 4.0.1. 添加
    2. 4.0.2. 快捷修改
    3. 4.0.3. 是否生效