我的编程空间,编程开发者的网络收藏夹
学习永远不晚

spring cloud zuul 与 sentinel的结合使用操作

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

spring cloud zuul 与 sentinel的结合使用操作

spring cloud zuul 与 sentinel结合

本来大型服务处理请求超时,限流,降级熔断工作用hystrix,但是这个这个项目不再更新了,虽说它现在提供的版本不会影响到大多数开发者的使用,但是长远考虑,被更换是一件必然的事,而且现在像resilience4j, Sentinel这样的替代品出现,今天我们就看看使用zuul 与 Sentinel整合,实现降级与超时处理,其实网上有很多这样的教程,这里我只是做一个自己的笔记而已

1、必须的依赖


        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-zuul-adapter</artifactId>
            <version>1.7.1</version>
        </dependency>

2、配置文件,其实Sentinel在这里没什么配置


server:
  port: 6001
spring:
  application:
    name: e-zuul

eureka:
  instance:
    hostname: localhost
    lease-expiration-duration-in-seconds: 90 #表示服务端多长时间没有接受到心跳信息后可以删除自己
    lease-renewal-interval-in-seconds: 30 #表示需要要向服务端发送信息,表示自己还活着
    ip-address: true
  client:
    healthcheck:
      enabled: true #客户端心跳检测
    service-url:
      defaultZone: http://${eureka.instance.hostname}:3001/eureka/

zuul:
  add-proxy-headers: true
  LogFilter:
    pre:
      disable=true:
  routes:
    e-email:
      serviceId: e-email
      path: /email
    private void initGatewayRules() {
        Set<GatewayFlowRule> rules = new HashSet<>();
        rules.add(new GatewayFlowRule("e-user").setCount(3) // 限流阈值
                .setIntervalSec(1) // 统计时间窗口,单位是秒,默认是 1 秒
        );
        rules.add(new GatewayFlowRule("e-user")
                .setGrade(RuleConstant.DEGRADE_GRADE_RT)//设置超时类型规则
                .setMaxQueueingTimeoutMs(500)
        );
        GatewayRuleManager.loadRules(rules);
    }
}

4、回调处理类,当有请求被拦截到后,就会调用降级回调方法


// 自定义 FallbackProvider
@Component
public class MyBlockFallbackProvider implements ZuulBlockFallbackProvider {
    private Logger logger = LoggerFactory.getLogger(DefaultBlockFallbackProvider.class);
    // you can define route as service level 
    @Override
    public String getRoute() {
        return "*";
    }

    @Override
    public BlockResponse fallbackResponse(String route, Throwable cause) {
        RecordLog.info(String.format("[Sentinel DefaultBlockFallbackProvider] Run fallback route: %s", route));
        if (cause instanceof BlockException) {
            return new BlockResponse(429, "Sentinel block exception", route);
        } else {
            return new BlockResponse(500, "System Error", route);
        }
    }
}

zuul集成Sentinel最新的网关流控组件

一、说明

Sentinel 网关流控支持针对不同的路由和自定义的 API 分组进行流控,支持针对请求属性(如 URL 参数,Client IP,Header 等)进行流控。

Sentinel 1.6.3 引入了网关流控控制台的支持,用户可以直接在 Sentinel 控制台上查看 API Gateway 实时的 route 和自定义 API 分组监控,管理网关规则和 API 分组配置。

二、功能接入

1. 网关添加sentinel相关的jar依赖


<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>

2. 网关zuul的sentinel配置


spring:
  # sentinel动态配置规则
  cloud:
    sentinel:
      zuul:
        enabled: true
        order:
          pre: 2000
          post: 500
          error: -100
      filter:
        enabled: false
      datasource:
        # 限流
        ds1:
          nacos:
            server-addr: ${zlt.nacos.server-addr}
            dataId: ${spring.application.name}-sentinel-gw-flow
            groupId: DEFAULT_GROUP
            rule-type: gw-flow
        # api分组
        ds2:
          nacos:
            server-addr: ${zlt.nacos.server-addr}
            dataId: ${spring.application.name}-sentinel-gw-api-group
            groupId: DEFAULT_GROUP
            rule-type: gw-api-group

绑定gw-flow(限流)和gw-api-group(api分组)的规则数据源为nacos
并指定nacos上对应的dataId和groupId

3. nacos规则配置

3.1. 限流配置gw-flow

在这里插入图片描述

Data ID:api-gateway-sentinel-gw-flow

Group:DEFAULT_GROUP

配置内容:


[
  {
    "resource": "user",
    "count": 0,
    "paramItem": {
      "parseStrategy": 3,
      "fieldName": "name"
    }
  },
  {
    "resource": "uaa_api",
    "count": 0
  }
]

规则1:所有user的请求只要参数带有name的都拦截(qps=0),user为zuul路由配置上的routeId
规则2:api分组为uaa_api的所有请求都拦截(qps=0)

3.2. api分组配置gw-api-group

在这里插入图片描述

Data ID:api-gateway-sentinel-gw-api-group

Group:DEFAULT_GROUP

配置内容:


[
  {
    "apiName": "uaa_api",
    "predicateItems": [
      {
        "pattern": "/user/login"
      },
      {
        "pattern": "/api-uaa/oauth/**",
        "matchStrategy": 1
      }
    ]
  }
]

上面配置意思为满足规则的api都统一分组为uaa_api
分组规则1:精准匹配/user/login
分组规则2:前缀匹配/api-uaa/oauth/**

4. 网关zuul启动参数

需要在接入端原有启动参数的基础上添加-Dcsp.sentinel.app.type=1启动以将您的服务标记为 API Gateway,在接入控制台时您的服务会自动注册为网关类型,然后您即可在控制台配置网关规则和 API 分组,例如:


java -Dcsp.sentinel.app.type=1 -jar zuul-gateway.jar

三、sentinel控制台管理

API管理(分组)

网关流控规则

四、测试限流api

1. 测试限流规则1

所有user的请求只要参数带有name的都拦截(qps=0)

不加name参数,可以访问api

后面加上name参数,请求被拦截

在这里插入图片描述

2. 测试限流规则2

api分组为uaa_api的所有请求都拦截(qps=0)

前缀匹配/api-uaa/oauth/**

在这里插入图片描述

精准匹配/user/login

在这里插入图片描述 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

spring cloud zuul 与 sentinel的结合使用操作

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MongoDB中的聚合操作与管道使用方法是什么

在MongoDB中,聚合操作是用于对文档进行数据处理和计算的操作。聚合操作通常通过聚合管道来实现,管道是由一系列操作组成的操作链,每个操作会依次处理输入文档并将结果传递给下一个操作。聚合操作和管道的使用方法如下:使用聚合操作实现对文档的数
MongoDB中的聚合操作与管道使用方法是什么
2024-05-07

asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作

这篇文章主要介绍“asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作”
2023-06-30

操作系统容器编排与微服务架构:如何实现完美结合,让你的应用程序更加灵活

本文将深入探讨操作系统容器编排与微服务架构的完美结合,并通过演示代码,详细介绍如何在实际应用中实施,从而让应用程序更加灵活、高效。
操作系统容器编排与微服务架构:如何实现完美结合,让你的应用程序更加灵活
2024-02-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录