432a3101955add8a746d79eca47bca9a4a75800a.svn-base 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. package com.xxl.job.admin.core.route.strategy;
  2. import com.xxl.job.admin.core.route.ExecutorRouter;
  3. import com.xxl.job.core.biz.model.ReturnT;
  4. import com.xxl.job.core.biz.model.TriggerParam;
  5. import java.util.List;
  6. import java.util.Random;
  7. import java.util.concurrent.ConcurrentHashMap;
  8. import java.util.concurrent.ConcurrentMap;
  9. /**
  10. * Created by xuxueli on 17/3/10.
  11. */
  12. public class ExecutorRouteRound extends ExecutorRouter {
  13. private static ConcurrentMap<Integer, Integer> routeCountEachJob = new ConcurrentHashMap<Integer, Integer>();
  14. private static long CACHE_VALID_TIME = 0;
  15. private static int count(int jobId) {
  16. // cache clear
  17. if (System.currentTimeMillis() > CACHE_VALID_TIME) {
  18. routeCountEachJob.clear();
  19. CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24;
  20. }
  21. // count++
  22. Integer count = routeCountEachJob.get(jobId);
  23. count = (count==null || count>1000000)?(new Random().nextInt(100)):++count; // 初始化时主动Random一次,缓解首次压力
  24. routeCountEachJob.put(jobId, count);
  25. return count;
  26. }
  27. @Override
  28. public ReturnT<String> route(TriggerParam triggerParam, List<String> addressList) {
  29. String address = addressList.get(count(triggerParam.getJobId())%addressList.size());
  30. return new ReturnT<String>(address);
  31. }
  32. }