首页 > 其他分享 >SpringCloud动态路由利器--router4j

SpringCloud动态路由利器--router4j

时间:2023-12-03 22:56:10浏览次数:38  
标签:请求 -- SpringCloud 支持 url 实例 router4j 路由

​前言

本文介绍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 支持的框架

  • 网关
    • gateway(已支持)
    • zuul(待支持)
  • SpringCloud
    • loadbalancer(已支持)(SpringCloud2020及之后的版本)
    • 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:router4j: router4j是一个动态路由的平台,用于提高Java后端开发和调试效率。使用router4j,可以将某个url请求路由到指定的机器上,只需在可视化页面上将path绑定到应用实例的ip和端口上即可。

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. 加入权限管理,可以用于线上不停机更新应用。

 


标签:请求,--,SpringCloud,支持,url,实例,router4j,路由
From: https://www.cnblogs.com/knifeblade/p/17873986.html

相关文章

  • 20211105李宜时信息安全系统设计与实现学习笔记12
    20211105李宜时信息安全系统设计与实现学习笔记121.引言背景介绍:介绍MySQL数据库及其在业界的普及和应用,解释为何在Linux环境下学习MySQL是重要的。学习目标:明确学习MySQL的目标,比如理解数据库原理,掌握基本操作,或者成为数据库管理员。2.安装和配置安装步骤:详细描述在不......
  • java基础-变量、常量、作用域
    变量变量:指可以变化的量Java是一种强类型预言,每个变量都必须声明其类型Java变量是程序中最基本的储蓄单元,其要素包括变量名,变量类型和作用域。typevarName[=value][{,varName[=value]}];//数据类型变量名=值;可以使用都好隔开来声明多个同类型变量注意事项1.每个......
  • Oracle 系统表常用SQL
    Oracle中的数据字典区分静态和动态。静态是在用户访问数据字典时不发生改变的,动态是依赖数据库运行的性能的,反映数据库运行的信息。数据字典视图是由SYS(系统用户)所拥有的,默认只有SYS和拥有DBA系统权限的用户可以看到所有的视图。没有DBA权限的用户只能看到user_和all_视图。如果......
  • test
    centos7.8环境安装opencv-python #安装好python3.6.9以后要处理python3命令#ln-s/usr/local/python-3.6.9/bin/pip3/usr/bin/pip3#ln-s/usr/local/python-3.6.9/bin/pip3/usr/local/bin/pip3#ln-s/usr/local/python-3.6.9/bin/python3/usr/local/bin/python3......
  • 学习笔记12
    MySQL在openeuler上的安装与基本操作知识点归纳本章涵盖了MySQL关系数据库系统的基础知识。MySQL是一个由瑞典MySQLAB公司开发的关系型数据库管理系统,目前归属于Oracle旗下产品。它在WEB应用方面具有广泛的应用,被认为是最流行的关系型数据库管理系统之一。MySQL将数据保存在......
  • 实验五 继承和多态
    task3machinepets.hpp#include<iostream>#include<string>usingnamespacestd;classMachinePets{public:MachinePets(conststrings);MachinePets();stringget_nickname()const;public:virtualstringtalk(......
  • 2023-2024-120232325《网络空间安全导论》第四周学习
    教材内容总结问题1.整体论与还原论2.sql的应用数据库管理:SQL被用于创建、修改和管理数据库中的表格、索引、视图和存储过程等数据库对象。数据查询:SQL用于从数据库中检索数据,可以通过SELECT语句来执行简单或复杂的查询操作,以满足特定的数据需求。数据更新:SQL可以用于更新......
  • 友链
    欢迎来到我的友链小屋展示本站所有友情站点,排列不分先后,均匀打乱算法随机渲染的喔! 友链信息博客名称:FiveLin博客网址:https://www.fivelin.com/博客头像:https://img.fivelin.com/i/2023/11/14/2fu5dn.png博客介绍:蛟龙的奇思妙想。joinus如需友链,请添加微信(saylovesaykis......
  • 学习笔记十二
    《Unix/Linux系统编程》第十四章学习笔记MySQLMySQL是一个关系数据库系统。在关系数据库中,数据存储在表中。关系数据库系统的标准查询语言是SQL(结构化查询语言)UbuntuLinux下MySQL的安装与使用(1)安装MySQL命令sudoapt-getinstallmysql-server可以安装一个mysql—server包......
  • 2023-2024-1 20231325 《计算机基础与程序设计》第10周学习总结
    ###目录*作业信息*教材学习内容总结1.《计算机科学概论》第12,13,14章2.《c语言程序设计》第9章*基于AI的学习*学习心得*学习进度条作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业的要求在哪里1.学习《计算机科学概论》第12......