Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
1874cdfd
提交
1874cdfd
authored
3月 12, 2017
作者:
xueli.xue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
执行器LFU策略功能实现
上级
177ab8d2
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
37 行增加
和
4 行删除
+37
-4
ExecutorRouter.java
...ain/java/com/xxl/job/admin/core/route/ExecutorRouter.java
+1
-1
ExecutorRouteLFU.java
...m/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
+36
-3
没有找到文件。
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java
浏览文件 @
1874cdfd
...
...
@@ -25,7 +25,7 @@ public abstract class ExecutorRouter {
for
(
int
i
=
0
;
i
<
100
;
i
++)
{
String
ret
=
ExecutorRouter
.
route
(
666
,
new
ArrayList
<
String
>(
Arrays
.
asList
(
"127.0.0.1:0000"
,
"127.0.0.1:2222"
,
"127.0.0.1:3333"
)),
ExecutorRouteStrategyEnum
.
LEAST_
REC
ENTLY_USED
.
name
());
String
ret
=
ExecutorRouter
.
route
(
666
,
new
ArrayList
<
String
>(
Arrays
.
asList
(
"127.0.0.1:0000"
,
"127.0.0.1:2222"
,
"127.0.0.1:3333"
)),
ExecutorRouteStrategyEnum
.
LEAST_
FREQU
ENTLY_USED
.
name
());
System
.
out
.
println
(
ret
);
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java
浏览文件 @
1874cdfd
...
...
@@ -2,7 +2,8 @@ package com.xxl.job.admin.core.route.strategy;
import
com.xxl.job.admin.core.route.ExecutorRouter
;
import
java.util.ArrayList
;
import
java.util.*
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* 单个JOB对应的每个执行器,使用频率最低的优先被选举
...
...
@@ -13,12 +14,44 @@ import java.util.ArrayList;
*/
public
class
ExecutorRouteLFU
extends
ExecutorRouter
{
private
static
ConcurrentHashMap
<
Integer
,
HashMap
<
String
,
Integer
>>
jobLfuMap
=
new
ConcurrentHashMap
<
Integer
,
HashMap
<
String
,
Integer
>>();
private
static
long
CACHE_VALID_TIME
=
0
;
@Override
public
String
route
(
int
jobId
,
ArrayList
<
String
>
addressList
)
{
// TODO
// cache clear
if
(
System
.
currentTimeMillis
()
>
CACHE_VALID_TIME
)
{
jobLfuMap
.
clear
();
CACHE_VALID_TIME
=
System
.
currentTimeMillis
()
+
1000
*
60
*
60
*
24
;
}
// lfu item init
HashMap
<
String
,
Integer
>
lfuItemMap
=
jobLfuMap
.
get
(
jobId
);
// Key排序可以用TreeMap+构造入参Compare;Value排序暂时只能通过ArrayList;
if
(
lfuItemMap
==
null
)
{
lfuItemMap
=
new
HashMap
<
String
,
Integer
>();
jobLfuMap
.
put
(
jobId
,
lfuItemMap
);
}
for
(
String
address:
addressList
)
{
if
(!
lfuItemMap
.
containsKey
(
address
))
{
lfuItemMap
.
put
(
address
,
0
);
}
}
// load least userd count address
List
<
Map
.
Entry
<
String
,
Integer
>>
lfuItemList
=
new
ArrayList
<
Map
.
Entry
<
String
,
Integer
>>(
lfuItemMap
.
entrySet
());
Collections
.
sort
(
lfuItemList
,
new
Comparator
<
Map
.
Entry
<
String
,
Integer
>>()
{
@Override
public
int
compare
(
Map
.
Entry
<
String
,
Integer
>
o1
,
Map
.
Entry
<
String
,
Integer
>
o2
)
{
return
o1
.
getValue
().
compareTo
(
o2
.
getValue
());
}
});
Map
.
Entry
<
String
,
Integer
>
addressItem
=
lfuItemList
.
get
(
0
);
String
minAddress
=
addressItem
.
getKey
();
addressItem
.
setValue
(
addressItem
.
getValue
()
+
1
);
return
address
List
.
get
(
0
);
return
address
Item
.
getKey
(
);
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论