【Spring Cloud】协同开发利器之动态路由

介绍

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

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

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

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

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

在这里插入图片描述

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

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

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

集成

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

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>

Wiki上可以查看最新的版本

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

  • 集成到网关(可以控制网关的转发)
  • 集成到服务(可以控制服务间调用)

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

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

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

但是不能保证在某些版本中能完全兼容,比如像2.0.x2.2.xgateway代码

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.x2.2.x2.6.x,如果大家在集成之后出现报错或是不生效的情况,可以联系我并提供Spring CloudSpring 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/**加入白名单

添加

在这里插入图片描述

路由有这几个参数

参数说明支持通配符
匹配服务路由生效的服务
可以用 * 表示任意的服务
大小写不明感
匹配路径路由匹配的路径
可以使用通配符
多个可用路由最精确的优先匹配
基于AntPathMatcher
服务地址路由的服务地址
host:port格式
也可以只写host不匹配端口
强制路由当路由到的服务不可用时
如果强制路由开启则会导致服务不可用
如果强制路由关闭则会通过原本的负载均衡规则重新选择服务
-
是否启用是否启用路由-

快捷修改

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

在这里插入图片描述

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

是否生效

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

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

结束

今天的内容就是这些啦,如果大家现在就有遇到类似的问题或者感兴趣的话可以试一下哦,也可以看看其他的库

之后会出一篇解析来说明一些实现的细节,希望大家多多捧场


其他的文章

【Spring Cloud】一个配置注解实现 WebSocket 集群方案

【Spring Boot】WebSocket 的 6 种集成方式

【Java】简单优雅的加载外部 jar 中的 Class|插件化

【Spring Boot】一个注解实现下载接口

【拿来吧你】JDK动态代理

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Gateway可以通过使用actuator API来实现动态路由动态路由是指在网关服务不停机的状态下,可以动态地添加或删除路由。在之前的实战中,我们提到了通过配置中心进行路由配置,并使用actuator手动刷新的方式来实现动态路由。而在Spring Cloud Gateway中,另一种实现方式是直接使用actuator API。 通过使用Spring Cloud Gateway的actuator API,我们可以通过发送HTTP请求来添加、修改或删除路由。通过调用相应的API接口,我们可以实现对路由的增删改操作。这种方式比起使用配置中心进行配置更加灵活,可以实时地进行路由的更新。 需要注意的是,使用actuator API来实现动态路由需要对Spring Cloud Gateway的actuator API进行配置和使用。具体的实现细节可以参考官方文档,文档地址为:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#actuator-api。在这个文档中,你可以找到关于actuator API的详细介绍和具体的使用方法。 总结起来,Spring Cloud Gateway可以通过使用actuator API来实现动态路由,这种方式可以在网关服务不停机的情况下,实时地添加、修改或删除路由。具体的实现方法可以参考官方文档中关于actuator API的介绍和使用方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [spring-cloud-gateway(2)--->spring-cloud-gateway如何实现动态路由](https://blog.csdn.net/qq_34978129/article/details/112621584)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值