sentinel---入门整合

目录

  • 推荐公众号
  • 简介
  • 与zuule网关整合
  • 与spring boot项目整合
  • 总结

推荐公众号

有彩蛋哦!!!(或者公众号内点击网赚获取彩蛋)
程序员探索之路

简介

官方中文文档
Sentinel
sentinel是阿里出品的限流,熔断,降级工具,hystrix停止维护了

Sentinel 具有以下特征:
丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,
例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、
实时熔断下游不可用应用等。

完备的实时监控: Sentinel 同时提供实时的监控功能。
您可以在控制台中看到接入应用的单台机器秒级数据,
甚至 500 台以下规模的集群的汇总运行情况。

广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,
例如与 Spring Cloud、Dubbo、gRPC 的整合。
您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。

完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展点。
您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理、适配数据源等。

与zuule网关整合

		(1)引入jar包
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-zuul-adapter</artifactId>
            <version>1.6.0</version>
        </dependency>
        (2)写zuuleconfig 配置类
        @Configuration
            public class GatewayConfiguration {
                //
                @Bean
                public ZuulFilter sentinelZuulPreFilter() {
                    // We can also provider the filter order in the constructor.
                    return new SentinelZuulPreFilter();
                }

                @Bean
                public ZuulFilter sentinelZuulPostFilter() {
                    return new SentinelZuulPostFilter();
                }

                @Bean
                public ZuulFilter sentinelZuulErrorFilter() {
                    return new SentinelZuulErrorFilter();
                }

                @Bean
                public ZuulFilter rainStatusAuthFilter(RainStatusAuthProvider rainStatusAuthProvider) {
                    return new RainStatusAuthFilter(rainStatusAuthProvider);
                }

                @PostConstruct
                public void doInit() {
                    //FallbackProvider  这个可以自定义的 我这里用了默认的
                    ZuulBlockFallbackManager.registerProvider(new DefaultBlockFallbackProvider());
                    initGatewayRules();
                }

                /**
                * 限流规则
                dingtalkservice  服务名  setCount(10)阈值  .setIntervalSec(1)单位1秒   就是1秒访问10次
                */
                private void initGatewayRules() {
                    Set<GatewayFlowRule> rules = new HashSet<>();
                    rules.add(new GatewayFlowRule("dingtalkservice").setCount(1) 
                        .setIntervalSec(1)
                    );
                    GatewayRuleManager.loadRules(rules);
                }

                @Configuration
                public static class SwaggerBasePathRewritingConfiguration {

                    @Bean
                    public SwaggerBasePathRewritingFilter swaggerBasePathRewritingFilter() {
                        return new SwaggerBasePathRewritingFilter();
                    }
                }

                @Bean
                public DynamicZuulRouteLocator routeLocator(ZuulProperties zuulProperties, ServerProperties serverProperties, DynamicRouteProvider dynamicRouteProvider, ApplicationEventPublisher applicationEventPublisher) throws NacosException {
                    DynamicZuulRouteLocator routeLocator = new DynamicZuulRouteLocator(
                        serverProperties.getServlet().getContextPath(), zuulProperties, dynamicRouteProvider, applicationEventPublisher);
                    return routeLocator;
                }

                @Bean
                public DiscoveryClientRouteLocator discoveryRouteLocator(ZuulProperties zuulProperties, ServerProperties serverProperties) {
                    return new EmptyDiscoveryClientRouteLocator(serverProperties.getServlet().getContextPath(),
                        null, zuulProperties, null, null);
                }
            }
            (3)效果
            是默认FallbackProvider的效果
            {
                "code": 429,
                "message": "Sentinel block exception",
                "route": "dingtalkservice"
            }

与spring boot项目整合

与spring boot项目整合使用
       (1)引入jar包
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>0.2.0.RELEASE</version>
        </dependency>
        (2)控制台
        下载sentinel控制台jar包  https://github.com/alibaba/Sentinel/releases  java -jar ****.jar --server.prot=8090
        (3)配置
        spring:
            cloud:
            sentinel:
                transport:
                    dashboard: localhost:8090 #sentinel 控制台地址
                eager: true #取消懒加载
        (4)效果
        启动项目后访问一个接口,访问控制台页面 localhost:8090 账号密码均为sentinel
        就会看到各种信息,自己可以配置对接口的规则

总结

网关和服务项目同时配置服务限流  经过网关调用服务按照网关的规则走  
直接调用项目按照项目配置的限流走

还熔断与降级效果

你可能感兴趣的:(sentinel)