其他分享
首页 > 其他分享> > SpringMVC 集成 Sentinel

SpringMVC 集成 Sentinel

作者:互联网

这里展示的是最小化侵入的集成方式,不需要额外的第三方依赖,只需要 sentinel 本身,所以看起来就不是很灵活,毕竟没有注册中心,没有监控等。

导包

<dependency>
	<groupId>com.alibaba.csp</groupId>
	<artifactId>sentinel-core</artifactId>
	<version>1.8.4</version>
</dependency>

<dependency>
	<groupId>com.alibaba.csp</groupId>
	<artifactId>sentinel-datasource-extension</artifactId>
	<version>1.8.4</version>
</dependency>

sentinel-core 是核心包,sentinel-datasource-extension 是用于配置动态规则。
实现拉模式的数据源最简单的方式是继承 AutoRefreshDataSource 抽象类,然后实现 readSource() 方法,在该方法里从指定数据源读取字符串格式的配置数据。比如 基于文件的数据源。
FileRefreshableDataSource 会周期性的读取文件以获取规则,当文件有更新时会及时发现,并将规则更新到内存中。

动态规则配置

public class DataSourceInitFunc implements InitFunc {
    private Converter<String, List<FlowRule>> flowRuleListParser = source -> JSON.parseObject(source,
            new TypeReference<List<FlowRule>>() {
            });

    @Override
    public void init() throws Exception {
        ClassLoader classLoader = getClass().getClassLoader();
        String flowRulePath = URLDecoder.decode(classLoader.getResource("FlowRule.json").getFile(), "UTF-8");

        FileRefreshableDataSource<List<FlowRule>> flowRuleDataSource = new FileRefreshableDataSource<>(
                flowRulePath, flowRuleListParser);

        FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
    }
}

接着将对应的类名添加到位于资源目录(通常是 resource 目录)下的 META-INF/services 目录下的 com.alibaba.csp.sentinel.init.InitFunc 文件中,比如:

com.test.init.DataSourceInitFunc

这样,当初次访问任意资源的时候,Sentinel 就可以自动去注册对应的数据源了。

FlowRule.json

[
    {
        "resource": "/_cat/health",
        "controlBehavior": 1,
        "count": 5,
        "grade": 1,
        "limitApp": "default",
        "strategy": 0
    }
]

标签:集成,resource,SpringMVC,数据源,sentinel,init,限流,Sentinel,com
来源: https://www.cnblogs.com/manastudent/p/16521034.html