123456789101112131415161718192021222324252627282930313233343536373839 |
- package com.xxl.job.admin.core.route.strategy;
- import com.xxl.job.admin.core.route.ExecutorRouter;
- import com.xxl.job.core.biz.model.ReturnT;
- import com.xxl.job.core.biz.model.TriggerParam;
- import java.util.List;
- import java.util.Random;
- import java.util.concurrent.ConcurrentHashMap;
- import java.util.concurrent.ConcurrentMap;
- /**
- * Created by xuxueli on 17/3/10.
- */
- public class ExecutorRouteRound extends ExecutorRouter {
- private static ConcurrentMap<Integer, Integer> routeCountEachJob = new ConcurrentHashMap<Integer, Integer>();
- private static long CACHE_VALID_TIME = 0;
- private static int count(int jobId) {
- // cache clear
- if (System.currentTimeMillis() > CACHE_VALID_TIME) {
- routeCountEachJob.clear();
- CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
- }
- // count++
- Integer count = routeCountEachJob.get(jobId);
- count = (count==null || count>1000000)?(new Random().nextInt(100)):++count; // 初始化时主动Random一次,缓解首次压力
- routeCountEachJob.put(jobId, count);
- return count;
- }
- @Override
- public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
- String address = addressList.get(count(triggerParam.getJobId())%addressList.size());
- return new ReturnT<String>(address);
- }
- }
|