当前位置: 首页 > news >正文

SpringCloud 运用(5)—— sentinel限流与seata分布式事务

阿里巴巴 Sentinel 是一个强大的、面向分布式服务架构的高可用流量防护组件,主要用于保障微服务架构下的系统稳定性。它主要提供了以下几个方面的功能:

  1. 流量控制:Sentinel 可以根据不同的条件(如QPS、线程数等)对流量进行控制,防止系统被瞬时的流量高峰冲垮,确保系统的稳定性和可用性。

  2. 熔断降级:当检测到某个服务出现异常或响应时间过长时,Sentinel 可以自动对该服务进行熔断,减少对其它服务的影响,并在一定时间后尝试恢复。

  3. 系统自适应保护:通过监控系统当前的负载情况(如CPU使用率),Sentinel 能够动态调整流量控制策略,保护系统免受过多请求的影响。

  4. 实时监控和规则管理:Sentinel 提供了丰富的监控数据视图以及灵活的规则配置方式,方便用户及时了解系统运行状态并对流量控制策略进行调整。

Sentinel 支持多种编程语言,包括Java、Go等,并且可以很好地与Spring Cloud、Dubbo等流行的微服务框架集成,为开发者提供了一站式的流量防护解决方案。

sentinel下载地址:

https://github.com/alibaba/Sentinel/releases

通过java -jar命令运行sentinel 

http://localhost:8080/#/login

启动成功后,打开sentinel,默认的账号密码为sentinel

SpringCloud项目需要导入sentinel依赖,连接sentinel服务器

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

配置sentinel服务器的地址,sentinel服务器默认情况下,调用接口后才会进行连接,为了启动时就进行连接,需要在配置中手动开启

spring:application:name: service-order #项目名称sentinel:transport:dashboard: localhost:8080 #sentinel控制台的访问地址eager: true #启动时加载sentinel规则

 定义/order请求每秒只能接受一个请求,如果请求数量超过一个将会阻塞

上面是sentinel默认的异常阻塞信息,我们可以在order微服务中自定义限流异常信息

package com.atguigu.exception;import com.alibaba.csp.sentinel.adapter.spring.webmvc_v6x.callback.BlockExceptionHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;import java.io.PrintWriter;@Component
public class MyBlockExceptionHandler implements BlockExceptionHandler {@Overridepublic void handle(HttpServletRequest request, HttpServletResponse response, String resourceName, BlockException e) throws Exception {response.setContentType("application/json;charset=utf-8");PrintWriter writer = response.getWriter();writer.write(resourceName + "被Sentinel限流了,原因"+e.getClass());writer.flush();writer.close();}
}

 这里是我们自定义返回的阻塞信息

但上面请求中,我们仅仅是对controller请求进行限流,那么我们如何给Service层方法进行限流呢? 

 @SentineResource用于对非controller层进行限流,blockHandler定义限流后返回的数据,若未定义回调数据,高并发环境下会被全局异常处理器拦截,如果都没有定义,在高并发环境下会抛出500异常

Seata 是一个由阿里巴巴开源的分布式事务解决方案,旨在解决微服务架构下的分布式事务问题。它提供了高性能和易于使用的分布式事务服务,支持多种分布式事务模式,帮助企业快速构建可靠的分布式应用。


apache-incubator-seata-2.1.0安装包下载_开源镜像站-阿里云

启动seata

账号密码,默认为seata

在resources下创建一个file.conf文件,配置seata的地址

service {vgroupMapping.default_tx_group = "default"default.grouplist = "127.0.0.1:8091"enableDegrade = falsedisableGlobalTransaction = false
}

重启服务器,可以查看到seata连接成功

 

在需要使用事务的方法中使用 @GlobalTransactional注解,即可实现分布式事务。

http://www.dtcms.com/a/274411.html

相关文章:

  • 「备忘」查询日志
  • Spring Boot整合MyBatis+MySQL实战指南(Java 1.8 + 单元测试)
  • 从 JavaFX WebView 迁移至 JxBrowser
  • 【科研绘图系列】R语言绘制系统发育树和柱状图
  • 以科技赋能未来,科聪持续支持青年创新实践 —— 第七届“科聪杯”浙江省大学生智能机器人创意竞赛圆满落幕
  • 宝塔 php支持sqlserver
  • 稀疏激活大模型推理优化:突破效率瓶颈的曙光
  • JavaScript VMP (Virtual Machine Protection) 分析与调试
  • 动态规划初步(完全背包)
  • The 2023 ICPC Asia Hangzhou Regional Contest (H. Sugar Sweet II(基环树,期望))
  • 闲庭信步使用图像验证平台加速FPGA的开发:第九课——图像插值的FPGA实现
  • 【JMeter】执行SQL
  • Elasticsearch 滚动(Scroll)用法、使用场景及与扫描(Scan)的区别
  • Linux 下使用 vim 文本编辑器时的操作指令
  • OGG-00551 ODBC error: SQLSTATE 22007,从字符串转换日期和/或时间时,转换失败
  • 和鲸社区深度学习基础训练营2025年关卡3_Q1(1)
  • 零基础入门:Air8000系列蓝牙配网开发(LuatOS版)
  • 攻防世界——web题 upload
  • Laravel + Python 图片水印系统:实现与调试指南
  • 将七大核心理念融入AI Agent设计——构建“数字生命体”的宏伟蓝图
  • 大数据在UI前端的应用创新:基于用户反馈的产品迭代优化系统
  • UI前端大数据可视化实战技巧:如何利用数据故事化提升用户参与度?
  • 前端面试专栏-算法篇:22.树结构(二叉树、B树、红黑树)
  • Web 应用防火墙:守护应用安全的核心屏障
  • webpack高级配置
  • OpenAvatarChat数字人项目结构分析
  • 星云穿越与超光速飞行特效的前端实现原理与实践
  • 第三章 隧道与轨道交通工程 3.8 安全质量控制
  • 排序算法(一):冒泡排序
  • UniApp 生命周期详解:从启动到销毁的完整指南