springboot框架项目实践应用(springcloud alibaba整合sentinel)

Spring Cloud Alibaba 架构-Sentinel整合nacos和gateway sentinel官网: https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5sentinel 下载地址: https://github.com/alibaba/Sentinel/releasesnacos官网: https://nacos.io/zh-cn/docs/deployment.htmlnacos下载地址: https://github.com/alibaba/nacos/releases。 阅读详情

1.引言

到这里,我们已经体验过了sentinel这个服务容错神奇的威力!其实在实际应用中,如果将sentinel整合到springcloud alibaba使用,会更加方便和强大。

考虑到可能有小伙伴还不熟悉spring cloud alibaba,我们先简单介绍一下,看到名字你应该已猜到了

  • springcloud alibaba,是阿里基于springcloud孵化的新一代微服务架构工具集
  • 如果你熟悉springcloud,简单理解起来,你同样熟悉springcloud alibaba,因为它们同祖同宗
  • springcloud alibaba在springcloud基础上,推出了一些新的组件,比如说nacos用于替换Eureka(Eureka官方已经不在维护了!),sentinel替换Hystrix(Hystrix官方已经不在维护了!)

因此,如果我们在做微服务架构技术栈选型的时候,不妨推荐小伙伴们选择springcloud alibaba

同样顺便截个图:

2.整合springcloud alibaba sentinel

2.1.引入依赖管理

引入依赖管理,我们通常需要引入

  • springboot依赖管理
  • springcloud依赖管理
  • springcloud alibaba依赖管理

为什么需要引入这么多呢?因为springcloud基于springboot,springcloud alibaba基于springcloud,都引入以后,我们就可以在项目中放心使用spring全家桶组件了!

<!--公共变量定义-->
<properties>
    <java.version>1.8</java.version>
    <spring-boot.version>2.3.2.RELEASE</spring-boot.version>
    <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
    <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
 </properties>

<!--引入依赖管理-->
<dependencyManagement>
    <dependencies>
       <!--spring boot 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--spring cloud依赖管理-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--spring cloud alibaba依赖管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.2.引入sentinel依赖

引入spring-cloud-starter-alibaba-sentinel组件

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

引入sentinel starter组件依赖

从图上上,已经看到我们熟悉的sentinel通信模块、以及aop模块了。

2.3.初始化资源

初始化加载之前案例中的流控规则、熔断规则

MySentinelResource

public interface MySentinelResource {
    /**
     * 流控资源
     */
    public static final String FLOW_RESOURCE = "flowResource";

    /**
     * 降级资源
     */
    public static final String DEGRADE_RESOURCE = "degradeResource";

}

LoadSentinelRules


@Component
@Slf4j
public class LoadSentinelRules {

    public LoadSentinelRules(){
        // 初始化加载流控规则
        initFlowRules();
        log.info("加载了流控规则.");

        // 初始化加载熔断降级规则
        initDegradeRules();
        log.info("加载了熔断降级规则.");

    }


    /**
     * 初始化流控规则
     */
    public void initFlowRules(){
        // 流控规则集合
        List<FlowRule> flowRules = Lists.newArrayList();

        FlowRule rule = new FlowRule();
        rule.setResource(MySentinelResource.FLOW_RESOURCE);// 资源
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // 流控阈值类型:qps
        rule.setCount(1);// 流控阈值:1

        flowRules.add(rule);

        FlowRuleManager.loadRules(flowRules);
    }

    /**
     * 初始化降级规则
     */
    public void initDegradeRules(){
        List<DegradeRule> degradeRules = Lists.newArrayList();

        DegradeRule rule = new DegradeRule();
        rule.setResource(MySentinelResource.DEGRADE_RESOURCE);// 资源
        rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);// 阈值类型:慢调用比例
        rule.setMinRequestAmount(5);// 最小请求数
        rule.setTimeWindow(1);// 熔断时长,单位秒
        rule.setSlowRatioThreshold(1);// 比例阈值
        rule.setCount(1);// 最大RT 单位毫秒
        rule.setStatIntervalMs(1000);// 统计时长,单位毫秒

        degradeRules.add(rule);

        DegradeRuleManager.loadRules(degradeRules);

    }

}

2.4.编写应用

开发一个restful接口应用,并在接口方法上加上@SentinelResource注解。

@RestController
@RequestMapping("sentinel")
@Slf4j
public class SentinelController {

    /**
     * 测试限流
     * @return
     */
    @RequestMapping("test")
    @SentinelResource(value = MySentinelResource.FLOW_RESOURCE, blockHandler = "testBlockHandler")
    public String test(){
        log.info("SentinelController---test......");

        return "test ok !";
    }

    /**
     * 限流后处理方法
     * @param e
     * @return
     */
    public String testBlockHandler(BlockException e){
        log.error("限流异常了:{}", e);
        return "error,限流了!";
    }
}

2.5.测试流控效果

启动应用,访问接口:http://127.0.0.1:8080/sentinel/test,疯狂刷新!

总结,通过案例发现在springcloud alibaba中,整合使用sentinel更加方便,只需要导入sentinel-starter组件,以及在资源方法上使用@SentinelResource注解,即完成流控实现资源保护了。

3.整合接入控制面板

3.1.启动sentinel控制面板

打开cmd窗口,执行命令

cd D:\sentinel
java -Dserver.port=8858 -Dcsp.sentinel.dashboard.server=localhost:8858 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar

3.2.增加sentinel配置

在需要接入dashboard控制面板的应用中,增加sentinel dashboard相关参数配置

spring:
  application:
    name: follow-me-springcloud-sentinel2
  mvc:
    view:
      prefix: /pages/
      suffix: .html
  cloud:
    #sentinel相关配置
    sentinel:
      transport:
        #配置与dashboard控制面板通信端口
        port: 8719
        #配置dashboard控制面板地址
        dashboard: 127.0.0.1:8858
      #开启饥饿加载,默认懒加载
      eager: true

启动应用,刷新控制面板,发现应用已经接入进来!方便,真是太方便了!

3.3.测试熔断效果

编写一个资源,配置熔断规则,试一下熔断效果吧!

访问:http://127.0.0.1:8080/sentinel/grade/1,疯狂刷新,在增加熔断规则前,是不会有任何熔断的

/**
 * 测试熔断降级
 * @param userId
 * @return
 */
 @RequestMapping("grade/{userId}")
 public String testGrade(@PathVariable("userId") String userId){

    log.info("SentinelController---testGrade......用户Id:{}",userId);

    return "test grade ok!";
}

在簇点链路找到端点:/sentinel/grade/{userId},增加熔断规则配置

再次访问端点:http://127.0.0.1:8080/sentinel/grade/1,疯狂刷新!这次熔断了!

本文源码地址:gitee.com/yanghouhua/…

SpringCloud Alibaba(保姆级入门及操作) 第一章 微服务概念 1.0 科普一些术语 科普一下项目开发过程中常出现的术语,方便后续内容的理解。 **服务器:**分软件与硬件,软件:类型tomcat这种跑项目的程序, 硬件:用来部署项目的电脑(一般性能比个人电脑好) **服务:**操作系统上术语:一个程序,开发中术语:一个能对外提供功能的程序 **微服务:**小的服务,一个完整项目可以拆n个子项目,这些子项目能独立运行,独立对为提供功能。 **节点:**微观上:一个服务,宏观上:一台服务器 **垂直扩展:**垂直扩展是指增强单机硬件性能 **水平扩 阅读详情

相关推荐

第一章 SpringCloud Alibaba简介——学习笔记

一、SpringCloud系统版本认识 1、SpringCloud版本发布时间统计 springcloud官方网站:https://spring.io/ 1.1、SpringCloud的版本更新发布时间(统计时间2020.04.28) Angel版本:2015年3月 Brixton版本:2016年5月 Camden版本:2016年9月 Dalston版本:2017年4月 Finchley版本:2018年6月 Greenwich.RELEASE:2019年1月 Hoxton.RELEASE

hankin的博客 6377

Sentinel简介

文章目录 Sentinel简介背景分析Sentinel概述安装Sentinel服务访问Sentinal服务 Sentinel限流入门概述Sentinel集成Sentinel限流快速入门 Sentinel流控规则分析阈值类型分析设置限流模式设计限流效果(了解)小节面试分...

HXW0902的博客 7854

SpringCloud Alibaba-Sentinel的使用

一、简介 官网:https://gitee.com/rmlb/Sentinel/wikis/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8?sort_id=3419419 1.1 熔断降级限流 什么是熔断 A 服务调用 B 服务的某个功能,由于网络不稳定问题,或者 B 服务卡机,导致功能时 间超长。如果这样子的次数太多。我们就可以直接将 B 断路了(A 不再请求 B 接口),凡是 调用 B 的直接返回降级数据,不必等待 B 的超长执行。 这样 B 的故障问题,就不会级联影 响到 A

fen_dou_shao_nian的博客 1101

OpenFeign基础应用以及Sentinel整合OpenFeign使用

OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求,用法其实就是编写一个接口,在接口上添加注解即可。可以简单理解它是借鉴Ribbon的基础之上,封装的一套服务接口+注解的方式的远程调用器。

weixin_43875870的博客 404

sentinal 限流详解

1.使用sentinal 对资源(一个java方法或者http接口)进行限流,下面代码每一秒2个请求,但是经过sentinal的qps限流设置1,所以一半请求进来,一半被拦截了。 public class Test1 { public static void main(String[] args) throws InterruptedException { // 限流 规...

吉他程序员的博客 2768

Spring Cloud Sentinel(限流、熔断、降级)、SpringBoot整合SentinelSentinel的使用-60

Sentinel(限流、熔断、降级)、SpringBoot整合SentinelSentinel的使用-60

suiyishiguang的博客 1万+

Redis集群之主从模式

主从模式的Sync同步操作主要是从节点拉取主节点RDB快照实现同步数据,Command Propagate命令传播则是解决从节点同步主节点非阻塞产生的新数据的不一致问题,这部分主节点的缓存命令会发送到从节点从而实现数据一致性。...

勤于笔记,成于点滴。 717

SpringCloud Alibaba 整合Sentinel的基本使用

Sentinel是由阿里巴巴开源的一款👽分布式系统的流量防卫兵👽,用于保护应用程序免受高并发、高负载和故障的影响。它主要用于实时监控应用程序的流量、熔断不可用的资源、降级服务以及提供实时的统计数据等功能。Sentinel 以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性try {/*您的业务逻辑 - 开始*//*您的业务逻辑 - 结束*//*流控逻辑处理 - 开始*/");/*流控逻辑处理 - 结束*/if (entry!

qq_39939541的博客 3588

SpringCloud Alibaba Sentinel

为什么需要服务熔断和降级 微服务是当前业界的一大趋势,原理就是将单一职责的功能模块独立化为子服务,降低服务间的耦合,服务间互相调用。但是这样也会出现一些问题: 大量微服务互相调用,存在大量的依赖关系,难免会出现某个服务故障,然后变成级联故障,最终导致系统不可用的坍塌,也就是服务雪崩。 当然还有某些场景,在一些时间段某些服务会出现高并发的情况,而某些服务占用着那些紧缺的资源显然是不太合理的,...

fxtahe的博客 4787

SpringCloud Alibaba整合Sentinel

SpringCloud Alibaba整合Sentinel Sentinel 控制台 1. 概述 Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。另外,鉴权在生产环境中也必不可少。这里,我们将会详细讲述如何通过简单的步骤就可以使用这些功能。 接下来,我们将会逐一介绍如何整合 Sentinel 核心库和 Dashboard,让它发挥最大的作用。同时我们也在阿里云上提供企业级的控制台:AHAS Sentinel 控制台,您只需要几个简单的步

xiong_min的博客 802

Sentinel -【SpringBootSpringCloud整合Sentinel

Spring Boot项目Sentinel的使用 Spring Cloud Alibaba整合Sentinel

xiaochen的博客 785

SpringCloud Alibaba微服务工程搭建(保姆级)

springcloud alibaba 微服务架构,微服务工程搭建

知道的越多 不知道的就越多 2万+

Springcloud Alibaba Sentinel学习及使用

Springcloud Alibaba Sentinel:熔断、降级、限流一、概念介绍 一、概念介绍 1、什么是熔断? 2、什么是限流? 3、区别?

furenqiang的博客 775

SpringCloud Alibaba Sentinel 简介和安装

SpringCloud Alibaba Sentinel 简介和安装

快乐的小三菊的博客 2992

第七章 SpringCloud Alibaba 实现微服务集成Sentinel

Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制熔断降级系统负载保护等多个维度来保护服务的稳定性。Sentinel 具有以下特征:丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不用应用等。完备的实时监控:Sentinel 提供了实时的监控功能。通过控制台可以看到接入应用的单台机器秒。

weixin_44831330的博客 2279

springCloud Alibaba实战四之Sentinel(控制台及限流)

Spring Cloud Alibaba Sentinel 上一篇博客我已经用到Sentinel与OpenFeign结合完成服务降级功能, 只是单纯的使用了他的降级供能,并没有介绍Sentinel详细内容,到底还有什么其他功能, 接下来正式介绍Sentinel: sentinel官方文档 Sentinel 介绍 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切...

weixin_43606738的博客 1136

SpringCloud Alibaba学习笔记 ——(六、Sentinel 服务保护框架

由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档还有更多面试复习笔记分享如下《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!@Bean配置限流的接口(对应上述第一段实现原理)/**由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档。

2401_84152308的博客 969

最新版 !快速掌握 JDK17 + springboot3 + springcloud Alibaba : 5、服务熔断降级 Sentinel

官网:https://sentinelguard.io/zh-cn/index.htmlSentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控。

云上凯歌 1085
上一篇: springboot框架项目实践(拦截器+redis实现接口防刷)
下一篇: 十年大厂员工终明白:MySQL性能优化的尽头,是对B+树的极致理解
程序员职业指南
博客等级 码龄4年 2107粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值