惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy International News Feed
T
The Exploit Database - CXSecurity.com
Cisco Talos Blog
Cisco Talos Blog
Schneier on Security
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
Scott Helme
Scott Helme
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
P
Proofpoint News Feed
P
Palo Alto Networks Blog
K
Kaspersky official blog
I
Intezer
The Last Watchdog
The Last Watchdog
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
小众软件
小众软件
G
GRAHAM CLULEY
Last Week in AI
Last Week in AI
量子位
IT之家
IT之家
F
Full Disclosure
T
Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
W
WeLiveSecurity
Y
Y Combinator Blog
V
V2EX
L
LINUX DO - 热门话题
Martin Fowler
Martin Fowler
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
D
Docker
Google DeepMind News
Google DeepMind News
博客园 - Franky
M
MIT News - Artificial intelligence
爱范儿
爱范儿
I
InfoQ
C
Cisco Blogs
L
LangChain Blog
J
Java Code Geeks
N
News | PayPal Newsroom
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Vercel News
Vercel News
Hugging Face - Blog
Hugging Face - Blog
S
Secure Thoughts
A
About on SuperTechFans

博客园 - 意犹未尽

从提示词工程到 Harness 设计范式 VsCode AI生态开源项目 掌握Redis集群通信,解决数据存取难题 jvm堆外内存-direct buffer spring-boot-actuator-Health原理 服务治理 概念、架构、协议格式到裸协议实现,彻底搞懂 MCP 的本质 maven-antrun-plugin插件 Spring AI-MCP源码整理 java响应式编程基础 压测实践案例之网关 elasticseach-分页搜索 sentinel增加ip来源限流后占用服务高内存问题分析 spring-boot-actuator elasticseach-head插件安装及使用 设计模式之美学习-代码命名规范 ES-Client-api-easy es sentinel-ProcessorSlot 记录一次内存泄漏排查 设计思路之系统做深能力的思维方式
sentinel-SPI初始化时机
意犹未尽 · 2024-10-24 · via 博客园 - 意犹未尽

时机一引入alibaba-starter-sentinel

如果使用了alibaba-starter-sentinel则不需要手动调用因为com.alibaba.cloud.sentinel.custom.SentinelAutoConfiguration#init在这里面执行了自动调用

@PostConstruct
    private 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 initialize
        if (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();
    }

}