Java之SpringCloudAlibaba Sentinel组件案例讲解

Java之SpringCloudAlibaba Sentinel组件案例讲解

概述

Sentinel是阿里巴巴开源的一款服务保护框架,可以通过限流、熔断降级、系统负载保护等手段保护应用服务不受影响,进而提升应用可用性、稳定性和安全性。本篇文章将讲解使用SpringCloudAlibaba集成Sentinel组件的案例,包括Sentinel Dashboard的使用和基于Sentinel的多种服务保护策略实现。

准备工作

  • JDK 1.8
  • Maven 3.0+
  • Spring Boot 2.x
  • Spring Cloud Alibaba 2.1.0
  • Sentinel 1.7.0

实现步骤

步骤一:引入依赖

首先,在pom.xml文件中添加以下依赖:

<!--Spring Cloud Alibaba Sentinel-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

<!--Spring Cloud Alibaba Nacos-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

步骤二:配置文件

在application.yml文件中添加以下配置:

# Sentinel配置
spring:
  cloud:
    sentinel:
      eager: true
      transport:
        dashboard: localhost:8080

其中eager属性为true表示开启了Sentinel初始化时的eager模式,transport.dashboard指定了Sentinel Dashboard的地址。

步骤三:创建服务

创建一个服务,用来测试Sentinel的限流、熔断降级、系统负载保护等功能。

步骤四:添加限流规则

在Sentinel的Dashboard中添加限流规则,可以在Dashboard中选择对应的服务,然后点击'flow',在'Rules'面板中添加限流规则。

步骤五:添加熔断降级规则

在Sentinel的Dashboard中添加熔断降级规则,可以在Dashboard中选择对应的服务,然后点击熔断降级,在'Rules'面板中添加熔断降级规则。

步骤六:添加系统负载保护规则

在Sentinel的Dashboard中添加系统负载保护规则,可以在Dashboard中选择对应的服务,然后点击系统负载保护,在'Rules'面板中添加系统负载保护规则。

示例一:基于Sentinel的限流

步骤一:创建工程

首先,创建一个名为'spring-cloud-client'的工程。

步骤二:添加依赖

在pom.xml文件中添加以下依赖:

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

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

步骤三:添加配置

在application.yml文件中添加以下配置:

server:
  port: 8081

spring:
  application:
    name: spring-cloud-client

nacos:
  discovery:
    server-addr: localhost:8848
  config:
    server-addr: localhost:8848
    namespace: 2fea6b37-5a9a-4eba-ac4d-e94d4d517ccd
    group: DEFAULT_GROUP

# Sentinel配置
spring:
  cloud:
    sentinel:
      eager: true
      transport:
        dashboard: localhost:8080

# 测试服务
test-service:
  limit:
    qps: 5 #每秒钟只允许5个请求访问
  fallback:
    enabled: true #开启熔断降级fallback

步骤四:创建Controller

在工程中创建名为'TestController'的Controller,代码如下:

@RestController
public class TestController {

    @GetMapping("/test")
    @SentinelResource(value = "test", blockHandlerClass = ExceptionUtil.class, blockHandler = "handleBlock")
    public String test() throws InterruptedException {
        Thread.sleep(1000);
        return "hello sentinel!";
    }

}

其中,使用注解'@SentinelResource'指定了资源名称为'test',同时指定了BlockHandler类为'ExceptionUtil',BlockHandler方法名称为'handleBlock'。

步骤五:添加限流规则

在Sentinel的Dashboard中添加限流规则。

步骤六:启动服务

启动服务,然后在浏览器中输入'localhost:8081/test'访问该服务,可以看到结果会在1秒钟后才返回。当访问次数超过限制时,就会触发Sentinel的限流策略,阻止请求访问。

示例二:基于Sentinel的熔断降级

步骤一:创建工程

首先,创建一个名为'spring-cloud-server'的工程。

步骤二:添加依赖

在pom.xml文件中添加以下依赖:

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

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

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
</dependency>

其中,添加了'spring-retry'依赖,用于在熔断恢复时进行重试。

步骤三:添加配置

在application.yml文件中添加以下配置:

server:
  port: 8080

spring:
  application:
    name: spring-cloud-server

nacos:
  discovery:
    server-addr: localhost:8848
  config:
    server-addr: localhost:8848
    namespace: 2fea6b37-5a9a-4eba-ac4d-e94d4d517ccd
    group: DEFAULT_GROUP

# Sentinel配置
spring:
  cloud:
    sentinel:
      eager: true
      transport:
        dashboard: localhost:8080

# 测试服务
test-service:
  fallback:
    enabled: true #开启熔断降级fallback
    fallbackUri: forward:/testFallback #熔断降级后转发请求的地址
  circuitBreaker:
    enabled: true
    requestVolumeThreshold: 4 #触发熔断的最小请求数量
    sleepWindowInMilliseconds: 10000 #熔断器开启的时间(ms)
    errorThresholdPercentage: 40 #错误率百分比

步骤四:创建Controller

在工程中创建名为'TestController'的Controller,代码如下:

@RestController
public class TestController {

    @GetMapping("/test")
    public String test() {
        throw new RuntimeException("error!");
    }

    @GetMapping("/testFallback")
    public String testFallback() {
        return "fallback!";
    }

}

其中,'test'接口会抛出异常,然后Sentinel会触发熔断降级策略,转发请求到'testFallback'接口。

步骤五:添加熔断降级规则

在Sentinel的Dashboard中添加熔断降级规则。

步骤六:启动服务

启动服务,然后在浏览器中输入'localhost:8080/test'访问该服务,可以看到结果会返回'fallback!',而不是抛出异常信息。当访问次数超过限制时,就会触发Sentinel的熔断降级策略,转发请求到'testFallback'接口。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java之SpringCloudAlibaba Sentinel组件案例讲解 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 详解supervisor使用教程

    详解Supervisor使用教程 什么是Supervisor Supervisor是一款Linux下的进程管理工具,可以很方便地监控和管理系统进程。使用Supervisor,可以很轻松地实现进程的自动重启、崩溃自动恢复、日志文件分割等功能。 安装Supervisor 安装Supervisor的方法因系统而异。 在Debian系系统下,可以使用如下命令安装: …

    人工智能概览 2023年5月25日
    00
  • Django中使用pillow实现登录验证码功能(带刷新验证码功能)

    以下是详细讲解“Django中使用pillow实现登录验证码功能(带刷新验证码功能)”的完整攻略,包含两条示例说明: 1. 安装pillow库 在Django中使用pillow来生成验证码实现登录验证功能,首先需要安装pillow库。可以通过以下命令在终端中安装: pip install pillow 2. 修改app.views.py文件 在app.vie…

    人工智能概论 2023年5月25日
    00
  • 利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)

    这篇文章的主要内容是讲解如何使用Vue.js、Node.js和MongoDB来创建一个博客系统,包括前端界面、后端API以及数据库数据的存储和管理。本文旨在提供一个完整的开发流程,帮助读者了解如何通过这三个技术栈来搭建一个具有基本功能的博客系统,并提供相应的源码以供学习和实践。 准备工作 创建一个新的博客系统需要一些必要的准备工作,包括环境安装、项目初始化、…

    人工智能概论 2023年5月25日
    00
  • Sanic框架安装与简单入门示例

    下面我将详细讲解 “Sanic框架安装与简单入门示例”的完整攻略。 1. Sanic框架安装 要安装Sanic框架,你需要先安装Python3.x,然后在命令行终端中输入以下命令: pip install sanic 如果你想安装最新版本的Sanic框架,可以使用以下命令: pip install git+https://github.com/sanic-o…

    人工智能概览 2023年5月25日
    00
  • Django 路由系统URLconf的使用

    下面是关于Django路由系统URLconf的使用的完整攻略: 什么是URLconf URLconf全名为URL configuration,它是Django框架中的一个模块,它用于定义URL地址与对应的视图函数之间的映射关系。URLconf通过将URL映射到对应的视图函数,实现了MVC(Model-View-Controller)模式中的控制器部分。 UR…

    人工智能概览 2023年5月25日
    00
  • Django+Uwsgi+Nginx如何实现生产环境部署

    Django+Uwsgi+Nginx是一种常见的生产环境部署方式,下面将详细讲解如何实现该部署方式。 一、安装必要的软件 部署Django应用,通常需要安装以下软件: Nginx:Web服务器,负责处理HTTP/HTTPS请求; uWSGI:Web服务器网关接口,将Web服务器与应用程序连接起来; Supervisor:进程管理器,用于管理uWSGI及Dja…

    人工智能概论 2023年5月25日
    00
  • PowerShell与Python的异同介绍

    PowerShell与Python的异同介绍 异同点 相关背景 PowerShell和Python都是流行的编程语言,其中PowerShell主要用于Windows系统上的任务自动化和系统管理,而Python则具有广泛的应用范围,包括Web开发、数据分析、机器学习等方向。虽然两种语言在某些方面非常相似,但是它们同样存在着许多不同点。 不同的语法 PowerS…

    人工智能概览 2023年5月25日
    00
  • python实现从wind导入数据

    要在Python中从Wind导入数据,你需要遵循以下步骤: 步骤1:安装Wind API Wind API是与Wind Financial Terminal数据库交互的Python包。在使用Wind API之前,用户需要对Wind API进行安装。可以在以下网址下载Wind API安装程序:https://www.wind.com.cn/NewSite/da…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部