router4j--SpringCloud动态路由利器

前言

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

6.go 库源码文件

目录 概述总结例子代码结构代码执行结果 结束 概述 库源码文件是不能被直接运行的源码文件&#xff0c;它仅用于存放程序实体&#xff0c;这些程序实体可以被其他代码使用&#xff08;只要遵从 Go 语言规范的话&#xff09; 那么程序实体是什么呢&#xff1f;在 Go 语言中&…

深度强化学习Task3:A2C、A3C算法

本篇博客是本人参加Datawhale组队学习第三次任务的笔记 【教程地址】 文章目录 Actor-Critic 算法提出的动机Q Actor-Critic 算法A2C 与 A3C 算法广义优势估计A3C实现建立Actor和Critic网络定义智能体定义环境训练利用JoyRL实现多进程 练习总结 Actor-Critic 算法提出的动机 蒙…

基于springboot+vue的网上租赁系统(前后端分离)

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

浪花 - 查询队伍列表

一、接口设计 1. 请求参数&#xff1a;封装 TeamQuery package com.example.usercenter.model.dto;import com.example.usercenter.common.PageRequest; import lombok.Data;/*** author 乐小鑫* version 1.0* Date 2024-01-22-20:14*/ Data public class TeamQuery extends …

助力医疗数字化转型,贝锐x医百科技案例解析

在医疗数字化这个历史进程的大浪潮中&#xff0c;医药企业扮演着重要的角色&#xff0c;其重要程度恐怕仅次于医疗机构本身。同时&#xff0c;数字化转型对于医药企业的赋能作用也是十分明显的&#xff0c;尤其在营销端&#xff0c;一系列的数字化管理、数字化推广方案已经成为…

Windows下安装达梦8开发版数据库

达梦数据库属于国产主流数据库之一&#xff0c;本文记录WIndows下安装最新的达梦8数据库的过程。   达梦官网&#xff08;参考文献1&#xff09;下载开发版&#xff08;X86平台&#xff09;版安装包&#xff0c;如下图所示&#xff1a; 解压安装包后&#xff0c;其中包含ISO文…

Neo4j基本用法

Neo4j基本用法 找到电影的示例点开 跳到2&#xff0c;然后点击提供的示例代码&#xff0c;会自动复制粘贴到上方的控制台&#xff0c;然后点击执行按钮 当我们点击了执行以后&#xff0c;会得到如下的基本图模型 将指示器跳到3&#xff0c;然后点击第一个查询语句 同样地&…

虚拟机网络配置及Moba工具的使用

A、设置IP和网关 1、设置IP [roothadoop00 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 &#xff08;修改如下标红内容&#xff0c;没有的就添加&#xff09; DEVICEeth0 HWADDR08:00:27:BD:9D:B5 #不用改 TYPEEthernet UUID53e4e4b6-9724-43ab-9da7-68792e611031…

人类行为动作数据集大合集

最近收集了一大波关于人类行为动作的数据集&#xff0c;主要包括&#xff1a;动作识别、行为识别、活动预测、动作行为分类等数据集。废话不多说&#xff0c;接下来就给大家介绍这些数据集&#xff01;&#xff01; 1、用于自动视频编辑的视频Blooper数据集 用于自动视频编辑…

助力工业焊缝质量检测,YOLOv7【tiny/l/x】不同系列参数模型开发构建工业焊接场景下工件表面焊接缺陷检测识别分析系统

焊接是一个不陌生但是对于开发来说相对小众的场景&#xff0c;在工件表面焊接场景下常常有对工件表面缺陷智能自动化检测识别的需求&#xff0c;工业AI结合落地是一个比较有潜力的场景&#xff0c;在我们前面的博文开发实践中也有一些相关的实践&#xff0c;感兴趣的话可以自行…

python-分享篇-时钟

文章目录 代码效果 代码 Function:Python制作简易时钟 Author:Charles 微信公众号:TONOWimport turtle import datetime悬空移动 def move(distance):turtle.penup()turtle.forward(distance)turtle.pendown()创建表针turtle def createHand(name, length):turtle.reset()move(…

【开源】基于JAVA的班级考勤管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统基础支持模块2.2 班级学生教师支持模块2.3 考勤签到管理2.4 学生请假管理 三、系统设计3.1 功能设计3.1.1 系统基础支持模块3.1.2 班级学生教师档案模块3.1.3 考勤签到管理模块3.1.4 学生请假管理模块 3.2 数据库设…

C++PythonC# 三语言OpenCV从零开发(3):图像读取和显示

文章目录 相关链接前言Mat是什么读取图片CC#Python 灰度处理CCSharpPython 打印图像信息CCsharpPython 总结 相关链接 C&Python&Csharp in OpenCV 专栏 【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程&#xff08;附带课程课件资料课件笔记&#xff09; …

C#winform上位机开发学习笔记11-串口助手接收数据用波形显示功能添加

1.功能描述 接收串口数据&#xff0c;并将收到的十六进制数据用坐标系的方式将数据波形展示出来 2.代码部分 步骤1&#xff1a;定义链表&#xff0c;用于数据保存 //数据结构-线性链表private List<byte> DataList new List<byte>(); 步骤2&#xff1a;定义波…

消息中间件之Kafka(一)

1.简介 高性能的消息中间件&#xff0c;在大数据的业务场景下性能比较好&#xff0c;kafka本身不维护消息位点&#xff0c;而是交由Consumer来维护&#xff0c;消息可以重复消费&#xff0c;并且内部使用了零拷贝技术&#xff0c;性能比较好 Broker持久化消息时采用了MMAP的技…

springboot集成tess4j

spring整合tess4j用于OCR识别图片&#xff0c;在windows环境识别正常&#xff0c;在liunx没有反应&#xff0c;本文用于解决部署linux问题。 整合springboot 1、引入pom文件 <dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess…

Sentinel 新版本发布,提升配置灵活性以及可观测配套

作者&#xff1a;屿山 基本介绍 Sentinel 是阿里巴巴集团开源的&#xff0c;面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;承接了阿里巴巴近 15 年的双十一大促流量的核心场景&#xff0c;例如秒杀、冷启动、消息削峰填谷、集群流量控制、实时熔断下游不可用服…

​ElasticSearch

目录 简介 基本概念 倒排索引 FST 简介 ES是一个基于lucene构建的&#xff0c;分布式的&#xff0c;RESTful的开源全文搜索引擎。支持对各种类型的数据的索引&#xff1b;搜索速度快&#xff0c;可以提供实时的搜索服务&#xff1b;便于水平扩展&#xff0c;每秒可以处理 …

【PyTorch】使用PyTorch创建卷积神经网络并在CIFAR-10数据集上进行分类

前言 在深度学习的世界中&#xff0c;图像分类任务是一个经典的问题&#xff0c;它涉及到识别给定图像中的对象类别。CIFAR-10数据集是一个常用的基准数据集&#xff0c;包含了10个类别的60000张32x32彩色图像。在本博客中&#xff0c;我们将探讨如何使用PyTorch框架创建一个简…