时机一引入alibaba-starter-sentinel
如果使用了alibaba-starter-sentinel则不需要手动调用因为com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration#init在这里面执行了自动调用
@PostConstructprivate void init() {if (StringUtils.isEmpty(System.getProperty(LogBase.LOG_DIR))&& StringUtils.hasText(properties.getLog().getDir())) {System.setProperty(LogBase.LOG_DIR, properties.getLog().getDir());}if (StringUtils.isEmpty(System.getProperty(LogBase.LOG_NAME_USE_PID))&& properties.getLog().isSwitchPid()) {System.setProperty(LogBase.LOG_NAME_USE_PID,String.valueOf(properties.getLog().isSwitchPid()));}if (StringUtils.isEmpty(System.getProperty(SentinelConfig.APP_NAME_PROP_KEY))&& StringUtils.hasText(projectName)) {System.setProperty(SentinelConfig.APP_NAME_PROP_KEY, projectName);}if (StringUtils.isEmpty(System.getProperty(TransportConfig.SERVER_PORT))&& StringUtils.hasText(properties.getTransport().getPort())) {System.setProperty(TransportConfig.SERVER_PORT,properties.getTransport().getPort());}if (StringUtils.isEmpty(System.getProperty(TransportConfig.CONSOLE_SERVER))&& StringUtils.hasText(properties.getTransport().getDashboard())) {System.setProperty(TransportConfig.CONSOLE_SERVER,properties.getTransport().getDashboard());}if (StringUtils.isEmpty(System.getProperty(TransportConfig.HEARTBEAT_INTERVAL_MS))&& StringUtils.hasText(properties.getTransport().getHeartbeatIntervalMs())) {System.setProperty(TransportConfig.HEARTBEAT_INTERVAL_MS,properties.getTransport().getHeartbeatIntervalMs());}if (StringUtils.isEmpty(System.getProperty(TransportConfig.HEARTBEAT_CLIENT_IP))&& StringUtils.hasText(properties.getTransport().getClientIp())) {System.setProperty(TransportConfig.HEARTBEAT_CLIENT_IP,properties.getTransport().getClientIp());}if (StringUtils.isEmpty(System.getProperty(SentinelConfig.CHARSET))&& StringUtils.hasText(properties.getMetric().getCharset())) {System.setProperty(SentinelConfig.CHARSET,properties.getMetric().getCharset());}if (StringUtils.isEmpty(System.getProperty(SentinelConfig.SINGLE_METRIC_FILE_SIZE))&& StringUtils.hasText(properties.getMetric().getFileSingleSize())) {System.setProperty(SentinelConfig.SINGLE_METRIC_FILE_SIZE,properties.getMetric().getFileSingleSize());}if (StringUtils.isEmpty(System.getProperty(SentinelConfig.TOTAL_METRIC_FILE_COUNT))&& StringUtils.hasText(properties.getMetric().getFileTotalCount())) {System.setProperty(SentinelConfig.TOTAL_METRIC_FILE_COUNT,properties.getMetric().getFileTotalCount());}if (StringUtils.isEmpty(System.getProperty(SentinelConfig.COLD_FACTOR))&& StringUtils.hasText(properties.getFlow().getColdFactor())) {System.setProperty(SentinelConfig.COLD_FACTOR,properties.getFlow().getColdFactor());}if (StringUtils.hasText(properties.getBlockPage())) {setConfig(BLOCK_PAGE_URL_CONF_KEY, properties.getBlockPage());}// earlier initializeif (properties.isEager()) {InitExecutor.doInit();} }
时机二调用SphU.entry时
// 1.5.0 版本开始可以直接利用 try-with-resources 特性 自动回收调用 entry.exit() 配合注解使用 @SentinelResource("HelloWorld")try (Entry entry = SphU.entry("HelloWorld",EntryType.IN)) {// 被保护的逻辑System.out.println(Thread.currentThread().getId() + "hello world" + (++i));} catch (BlockException ex) {i++;}
com.alibaba.csp.sentinel.SphU#entry(java.lang.String, com.alibaba.csp.sentinel.EntryType)
public static Entry entry(String name, EntryType trafficType) throws BlockException {return Env.sph.entry(name, trafficType, 1, OBJECTS0);}
类加载初始化
public class Env {public static final Sph sph = new CtSph();static {// If init fails, the process will exit. InitExecutor.doInit();}}