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日

相关文章

  • Django认证系统user对象实现过程解析

    Django认证系统user对象实现过程解析 Django提供了一个强大的认证系统,方便我们进行用户认证和管理。在这个系统中,用户对象user扮演了至关重要的角色。接下来,我将详细介绍Django认证系统user对象的实现过程。 User对象 Django认证系统中的User对象是一个封装了用户认证信息的数据结构。这个对象包含了用户的基本信息,如用户名、密码…

    人工智能概览 2023年5月25日
    00
  • CentOS 4.0安装配置Nginx的方法

    下面是详细的 “CentOS 4.0安装配置Nginx的方法”: 环境准备 在进行安装Nginx之前,我们需要准备好以下环境: CentOS 4.0系统 gcc编译环境:由于Nginx并不是通过yum的方式进行安装,我们需要手动编译,因此需要先安装好gcc编译环境。 安装Nginx 以下是安装Nginx的详细步骤: 下载并解压Nginx 在终端执行以下命令下…

    人工智能概览 2023年5月25日
    00
  • 宏碁未来蜂鸟轻薄环保电脑怎么样 宏碁未来蜂鸟轻薄环保电脑评测

    宏碁未来蜂鸟轻薄环保电脑评测 宏碁未来蜂鸟轻薄环保电脑是一款采用环保材质设计的轻薄笔记本电脑。它采用了第10代英特尔酷睿处理器、64GB内存和1TB硬盘。在轻薄设计的同时,它不会牺牲性能,让消费者得到了很好的使用体验。 性能 宏碁未来蜂鸟轻薄环保电脑的处理器采用第10代英特尔酷睿处理器,这是目前笔记本电脑市场上性能最优秀的处理器之一。它还配备了64GB内存和…

    人工智能概论 2023年5月25日
    00
  • Python一行代码识别发票并保存Excel示例详解

    下面是关于“Python一行代码识别发票并保存Excel示例详解”这个主题的详细讲解攻略。 一、概述 这篇文章主要介绍了如何使用Python代码识别发票信息并保存到Excel中。使用OCR技术识别出图片中的文字,并使用正则表达式进行匹配提取出发票的相关信息,最后将提取出的信息保存到Excel文件中。 二、实现步骤 1. 安装依赖包 使用Python代码处理图…

    人工智能概论 2023年5月25日
    00
  • Selenium启动Chrome时配置选项详解

    下面是“Selenium启动Chrome时配置选项详解”的完整攻略。 一、前言 在使用Selenium进行自动化测试的时候,启动WebDriver时需要添加一系列配置选项。其中,配置Chrome参数是一项比较需要注意的地方。本文将详细讲解Selenium启动Chrome时配置选项的定义、使用方法及参数含义。 二、Chrome配置选项详解 1. ChromeO…

    人工智能概览 2023年5月25日
    00
  • C++命名空间实例详解

    C++命名空间实例详解 什么是命名空间 在C++中,命名空间是为了避免不同代码库之间的命名冲突而提出的概念,类似于文件夹的概念,可以将许多具有相似性质的函数、变量、类等放在同一个命名空间下,通过命名空间限定符来访问。 命名空间的使用 在C++中,命名空间可以通过namespace关键字定义,可以通过using关键字来使用命名空间中的内容。 命名空间定义 命名…

    人工智能概览 2023年5月25日
    00
  • python爬虫数据保存到mongoDB的实例方法

    让我为您介绍一下Python爬虫数据保存到MongoDB的实例方法。 1. 安装MongoDB的Python库 要保存数据到MongoDB,我们需要安装pymongo的Python库。可以通过以下命令进行安装: pip install pymongo 2. 连接MongoDB数据库 在保存数据之前,我们需要先连接到MongoDB数据库。可以使用以下代码: i…

    人工智能概论 2023年5月25日
    00
  • Python 就业方面的选择与应用分析

    Python 就业方面的选择与应用分析 Python是一种高级、解释性、面向对象的编程语言,具有简单、易学、易读的特点。随着大数据、人工智能等技术的兴起,Python已经成为了一门非常热门的编程语言。在接下来的内容中,我们将从Python就业选择和应用两个方面做出详细分析。 Python 就业选择分析 在选择Python作为就业方向时,需要了解以下几个方面:…

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