Skip to content

路由策略

image-20240918162822145
路由策略解释说明
最后一个客户端a、b、c三台集群的情况下,总是命中c这台机器
第一个客户端a、b、c三台集群的情况下,总是命中a这台机器
轮询客户端a、b、c三台集群的情况下,总是安装a、b、c这种每台命中一次的节奏周而复始
LRU客户端a、b、c三台集群的情况下,会命中最近最少使用的那台客户端。
随机客户端a、b、c三台集群的情况下,随机命中一台
一致性哈希客户端a、b、c三台集群的情况下,一致性哈希算法会稳定的调度其中一台机器。

在测试之前我们可以固定一下其他参数,在只变更路由策略下进行测试

页面配置参数

配置项配置内容
任务名称路由测试
组名称ruoyi_group
状态启用
任务类型集群
执行器类型java
执行器名称routerTest
方法参数
路由策略$
阻塞策略丢弃
触发类型固定时间
间隔时长60秒
超时时间(秒)60秒
最大重试次数0
重试间隔1秒

节点代码

java
    @JobExecutor(name = "routerTest")
    public ExecuteResult routerTest(JobArgs jobArgs) throws InterruptedException {
        SnailJobLog.REMOTE.info("REMOTE日志.参数值:{}", JSON.toJSONString(jobArgs));
        SnailJobLog.REMOTE.info("REMOTE日志.当前节点{}", env.getProperty("server.port"));
        return ExecuteResult.success("处理完成");
    }

然后我们依次启动dev1->dev2->dev3

1.最后一个

当配置路由策略为最后一个时,SJ会一直将任务分发到最后一个注册进SJ的客户端节点,我们可以执行3次来验证一下是否如此

结果:SJ将所有任务都分发给了最后一个注册进来的客户端节点

2.第一个

当配置路由策略为第一个时,SJ会一直将任务分发到最先一个注册进SJ的客户端节点,我们可以执行3次来验证一下是否如此

结果:SJ将所有任务都分发给了最先一个注册进来的客户端节点

3.轮询

当配置路由策略为轮询时,SJ会一直将任务分发到最先一个注册进SJ的客户端节点,我们可以执行3次来验证一下是否如此

结果:SJ将所有任务轮流分发给了所有在线的客户端节点

4.LRU

首先我们来认识一下LRU指的是什么

LRU(Least Recently Used)算法,即最近最少使用算法,是一种常用的页面置换算法,也用于缓存淘汰策略。它基于一个假设:如果数据最近被访问过,那么将来被访问的几率也更高。LRU算法会淘汰最长时间未被使用的数据。

当配置路由策略为LRU时,SJ会一直将任务分发到执行调度次数最少的客户端节点

5.随机

随机大家都见名知意啦,这里就不做演示了。

6.一致性哈希

首先将所有在线节点编成一个哈希环,当有一个任务在SJ中被调度时,会根据任务计算出一个哈希值,然后通过哈希值在哈希环上找寻具体执行的客户点节点。