router4j--SpringCloud动态路由利器

news2024/10/6 1:41:55

前言

本文介绍Java的动态路由中间件:router4j。router4j用于SpringCloud项目,它可以将某个url请求路由到指定的机器上,也可以将所有请求强制转到指定机器。

问题描述

Java后端在开发SpringCloud项目时如果同一个应用起了多个实例,会遇到以下问题:

  1. 无法将指定url请求强制转到个人电脑。这样会导致难以打断点调试;如果是设置了应用的所有请求都到我的电脑,那么我在调试时其他接口无法使用。
  2. 无法将指定的feign的url请求强制转到个人电脑。
  3. 如果有人打了断点调试,很可能影响测试环境,因为网关的请求和feign请求还是会经常请求到打了断点的那个电脑。

本文介绍的router4j可以解决这个问题,是我个人写的中间件。它可以设置将指定的url的请求路由到指定的机器。

官网网址

官网文档:router4j官网(首先在官网更新,不定时同步到CSDN博客)

github:https://github.com/knife-blade/router4j

gitee:https://gitee.com/knifeedge/router4j

一、简介

1.1 概述

router4j是一个动态路由的中间件,用于提高Java后端开发和调试效率。

使用router4j,可以将某个url请求路由到指定的机器上,只需在可视化页面上将path绑定到应用实例的ip和端口上即可。

router4j也支持将所有请求强制转到指定机器,所以也可以用于线上不停机更新应用。

1.2 特性

  • 简单:支持通过Web页面操作,操作简单,一分钟上手;
  • 无侵入:引入依赖即可,无需修改代码
  • 性能损耗小:路径的规则存放在Redis,速度很快,几乎没有性能损耗
  • 支持路径的路由:可以指定某个url路由到指定机器
  • 支持默认路由:如果url没有设置规则,则转发到设置的默认路由的实例
  • 支持强制路由:所有url强制路由到指定实例(无论是否设置了规则)
  • 支持网关:支持网关的请求转发
  • 支持feign:支持feign的请求转发
  • 支持实例运行状态查看:支持查看实例的运行状态

1.3 支持的框架

  1. 网关
    1. gateway(已支持)
    2. zuul(待支持)
  2. SpringCloud的负载均衡
    1. loadbalancer(已支持)(SpringCloud2020及之后的版本)
    2. ribbon(待支持)

1.4 框架结构

1.在可视化页面进行配置,将url与实例(ip加端口)关联起来

2.前端请求进来时:gateway会使用本框架的全局过滤器,会根据这个url到Redis中的配置中查询,将url路由到指定的实例(ip加端口)

3.调用feign时:feign会使用本框架的负载均衡器,会根据这个url到Redis中的配置中查询,将url路由到指定的实例(ip加端口)

1.5 下载/依赖

github:https://github.com/knife-blade/router4j

gitee:https://gitee.com/knifeedge/router4j

maven:(待上传)

二、快速入门

  • router4j-server:router4j的控制台(后端)
  • router4j-vue:router4j的控制台(前端)
  • router4j-example:示例程序

2.1 启动控制台

1.启动后端

启动router4j-server

2.启动前端

启动router4j-vue

2.2 添加依赖

1.网关添加依赖

router4j-example/gateway

<dependency>
    <groupId>com.knife.router4j</groupId>
    <artifactId>router4j-client-gateway-boot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

2.应用添加依赖(用于feign)

router4j-example/business/order/order-core

<dependency>
  <groupId>com.knife.router4j</groupId>
  <artifactId>router4j-client-feign-boot-starter</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</dependency>

2.3 配置

网关和应用都要添加如下配置:

router4j:
  redis:
    host: localhost
    password: 222333
    port: 6379
    # database: 0
    # ssl: false
    # timeout: 3s
  rule:
    enable: true
    # pathPatternPrefix: "router4j:rule:pathPattern"
    # defaultInstancePrefix: "router4j:rule:defaultInstance"
  # instruction:
  #   cacheKey: "router4j:instruction"

2.4 开始使用

启动router4j服务:Redis、router4j-server、router4j-vue

启动示例服务(router4j-example路径):Nacos、geteway、业务应用(business路径)(2个order,2个storage,1个account)。

业务场景:创建订单,减库存、减账户余额。请求order的controller,order分别用feign调用storage和account。

需求:将网关请求order的/order/create转到192.168.150.1:9011这个实例,将storage的feign转到192.168.150.1:9021这个实例。

1.配置网关路径的路由

访问:http://localhost:10001/

在“规则管理”中配置路径与实例的绑定:

2.配置feign路径的路由

3.请求接口测试

postman访问(请求10次):http://localhost:6001/order/order/create/?userId=1&productId=1&count=10&money=100

结果:

order:(全部都请求到了指定的实例192.168.150.1:9012)

storage:(全部都请求到了指定的实例192.168.150.1:9021)

三、使用详解

3.1 规则管理

底层是基于Spring自身的AntPathMatcher来实现的,其规则见:此文

3.1.1 新建规则

支持下拉框选择和手动输入

3.1.2 查找规则

支持下拉框选择和手动输入

3.1.3 删除规则

支持单个删除(绿色箭头所指)和批量删除(红色箭头所指)。

3.2 实例管理

3.2.1 默认路由

所有实例列表

设置为默认路由

如果url没有设置规则,则转发到设置的默认路由的实例。

支持单个设置(绿色箭头)与批量设置(红色箭头)。

3.2.2 强制路由

所有url强制路由到指定实例(无论是否设置了规则)。

支持单个设置(绿色箭头)与批量设置(红色箭头)。

四、未来计划

  1. 发布0.0.1版本
  2. 支持某个路径配置的开启关闭
  3. 支持通过eureka获取实例信息
  4. 支持zuul网关
  5. 支持Ribbon(SpringCloud2020之前)
  6. 支持在配置中设置不启用router4j
  7. 写一个正式的router4j官网网站
  8. 加入权限管理,可以用于线上不停机更新应用。

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

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

相关文章

汽车网络架构与常用总线汇总

汽车CAN总线简述 CAN 是控制器局域网Controller Area Network 的缩写&#xff0c;1986年&#xff0c;由德国Bosch公司为汽车开发的网络技术&#xff0c;主要用于汽车的监测与控制&#xff0c;目的为适应汽车“减少线束的数量”“通过多个网络进行大量数据的高速传输”的需求。…

php中laravel项目开发技巧与避坑

公司开发新业务&#xff0c;涉及到地址引用和循环遍历&#xff0c;结果测试人员说部分数据对不上&#xff0c;经排查&#xff0c;ID无值&#xff0c;name却有值&#xff0c;断点定位后&#xff0c;发现是地址引用的问题引起的 问题原因 数据库查询也确实是0 解决方案 注意事项…

理想架构的非对称高回退Doherty功率放大器理论与仿真

Doherty理论—理想架构的非对称高回退Doherty功率放大器理论与仿真 参考&#xff1a; 三路Doherty设计 01 射频基础知识–基础概念 Switchmode RF and Microwave Power Amplifiers、 理想架构的Doherty功率放大器&#xff08;等分经典款&#xff09;的理论与ADS电流源仿真参考…

什么是ORM思想?

1. ORM概念 ORM&#xff08;Object Relational Mapping&#xff09;对象关系映射模式&#xff0c;是一种技术&#xff0c;解决了面向对象与关系型数据库存互不匹配的现象。 ORM在业务逻辑层和数据库层之间充当了桥梁的作用。 2. ORM由来 在软件开发的过程中&#xff0c;通常…

UE5.2、CesiumForUnreal实现加载GeoJson绘制单面

文章目录 前言一、实现目标二、实现过程1.实现原理2.数据读取3.三角剖分3.具体代码 4.蓝图测试 前言 UE5、CesiumForUnreal实现加载GeoJson绘制单面&#xff08;Polygon&#xff09;功能&#xff08;StaticMesh方式&#xff09; 一、实现目标 通过读取本地的Geojson数据&…

【Go学习】Ginkgo测试框架学习实践 + 问题记录 + 怎么解决(0)

1、ginkgo测试框架介绍&#xff1a;https://onsi.github.io/ginkgo/ 2、重点是学习实践 问题记录 怎么解决 3、送福利&#xff1a;国内好用的ChatGpt有很多&#xff0c;比如&#xff1a;天工、文心一言、讯飞星火、通义万相等 1. 安装 xxxmacdeMacBook-Pro-3  /Volumes/mac…

关于网络模型的笔记

1. OSI 七层参考模型&#xff1a; 简介&#xff1a; 七层模型&#xff0c;亦称 OSI&#xff08;Open System Interconnection&#xff09;参考模型&#xff0c;即开放式系统互联。参考模型 是国际标准化组织&#xff08;ISO&#xff09;制定的一个用于计算机或通信系统间互联…

mc我的世界服务器多少钱一个月?

我的世界服务器多少钱一个月&#xff1f;低至7元一个月&#xff0c;阿里云和腾讯云均可以选择mc服务器&#xff0c;阿里云2核2G3M轻量服务器87元一年、腾讯云轻量2核2G3M服务器88元一年&#xff0c;阿里云ECS云服务器2核2G3M带宽99元一年&#xff0c;腾讯云2核4G5M带宽轻量应用…

IPoE技术汇总

在国内并没有遇到这么多的IPoE&#xff08;IP over Ethernet&#xff09;技术&#xff0c;可能也是因为我来日本多年了&#xff0c;没有接触国内的IPv4 over IPv6的技术&#xff0c;感觉国内IPv4地址紧张&#xff0c;用的传统NAT和PPPoE非常多&#xff0c;大多数设备还是建立在…

docker - compose 部署 Tomcat

目录 下面用 docker-compose 方法部署 Tomcat 1、准备工作 2、部署容器 启动容器 查看新启动的容器 3、总结 下面用 docker-compose 方法部署 Tomcat 1、准备工作 先在主机创建工作文件夹&#xff0c;为了放置 Tomcat 的配置文件等。创建文件夹的方法&#xff0c;自己搞…

【linux】远程桌面连接到Debian

远程桌面连接到Debian系统&#xff0c;可以使用以下几种工具&#xff1a; 1. VNC (Virtual Network Computing) VNC&#xff08;Virtual Network Computing&#xff09;是一种流行的远程桌面解决方案&#xff0c;它使用RFB&#xff08;Remote Framebuffer Protocol&#xff0…

上位机图像处理和嵌入式模块部署(流程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过&#xff0c;传统图像处理的方法&#xff0c;一般就是pccamera的处理方式。camera本身只是提供基本的raw data数据&#xff0c;所有的…

sublime text 开启vim模式

sublime text 开启vim模式 打开配置文件 mac下点击菜单栏 Sublime Text -> Settings... -> Settings 修改配置文件并保存 添加配置 // 开启vim模式 "ignored_packages": [// "Vintage", ], // 以命令模式打开文件 "vintage_start_in_comman…

【博客搭建记录贴】问题记录:hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1,因为在此系统上禁止运行脚本。

1&#xff0c;背景 hexo&#xff08;博客框架&#xff09;安装完毕之后&#xff0c;正准备看看其版本&#xff0c;发现出现下面脚本禁止运行的错误。 PS C:\Users\PC> hexo -v hexo : 无法加载文件 C:\Program Files\nodejs\hexo.ps1&#xff0c;因为在此系统上禁止运行脚…

【Android】在WSA安卓子系统中进行新实验性功能试用与抓包(2311.4.5.0)

前言 在根据几篇22和23的WSA抓包文章进行尝试时遇到了问题&#xff0c;同时发现新版Wsa的一些实验性功能能优化抓包配置时的一些步骤&#xff0c;因而写下此篇以作记录。 Wsa版本&#xff1a;2311.40000.5.0 本文出现的项目&#xff1a; MagiskOnWSALocal MagiskTrustUserCer…

自然语言处理--概率最大中文分词

自然语言处理附加作业--概率最大中文分词 一、理论描述 中文分词是指将中文句子或文本按照语义和语法规则进行切分成词语的过程。在中文语言中&#xff0c;词语之间没有明显的空格或标点符号来分隔&#xff0c;因此需要通过分词工具或算法来实现对中文文本的分词处理。分词的…

RPC教程 3.服务注册

0. 前言 这一节要熟悉Go中的反射reflet&#xff0c;不然可能比较难理解。在使用到反射的一些函数时候&#xff0c;我也会讲解关于反射reflect的用法。 1.引出反射reflect 这个例子是表示客户端想使用Foo服务的Sum方法。即是想调用Foo结构体的Sum方法。 client.Call("F…

uniapp 在static/index.html中添加全局样式

前言 略 在static/index.html中添加全局样式 <style>div {background-color: #ccc;} </style>static/index.html源码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-…

Java线程池,看这一篇足够

目录一览 Java线程池1. Executors提供6个线程池快捷创建方式2. ThreadPoolExecutor的7大参数3. 自定义线程池 Java线程池 上一篇《Async注解的注意事项》说到Async注解要配合自定义线程池一起使用&#xff0c;这一节说下Java的线程池。 1. Executors提供6个线程池快捷创建方式…

基于springboot+vue的小徐影城管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…