package com.app.mvc.common; import com.app.mvc.config.GlobalConfig; import com.app.mvc.config.GlobalConfigKey; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import java.util.Map; import java.util.Random; import java.util.Set; /** * Created by jimin on 16/4/23. */ @Slf4j public class ServiceDegarding { public static boolean isAllowed(String url) { // 是否为不允许访问的url Set<String> notAllowedUrlSet = GlobalConfig.getSetValue(GlobalConfigKey.NOT_ALLOWED_URLS); if (notAllowedUrlSet.contains(url)) { log.info("service degarding, not allowed to visit url:{}", url); return false; } // 是否为切指定流量访问的url Map<String, String> percentAllowedUrlMap = GlobalConfig.getMapValue(GlobalConfigKey.PERCENT_ALLOWED_URLS); if (percentAllowedUrlMap.containsKey(url)) { String v = percentAllowedUrlMap.get(url); int percent = 10; // 如果设置了切部分流量, 默认开放10%的流量, 配置出错时使用这个值 if (!StringUtils.isNumeric(v)) { log.error("service degarding with percent setting error, url:{}, v:{}", v); } else { percent = Integer.parseInt(v); } percent = Math.min(percent, 100); int random = Math.abs(new Random().nextInt()) % 100; log.info("service degarding with percent, url:{}, percent;{}, random:{}", url, percent, random); return random < percent; } return true; } }