spring-cloud-alibaba微服务Sentinel

Sentinel 官方网站

sentinel-dashboard-1.8.7.jar包下载地址

在这里插入图片描述

在window通过命令行启动(java -Dserver.port=8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.7.jar),可以通过 -Dserver.port修改控制台的端口

在这里插入图片描述

使用的版本最好都一致

在这里插入图片描述

注意:如果项目不是springcloud,不可以在yml配置dashboard的地址,配置也都是无效的。如果需要和dashboard整合有以下几种方法

方法一:启动参数配置项官网

-Dcsp.sentinel.dashboard.server=192.168.11.47:8858 #dashboard的访问路径

-Dcsp.sentinel.api.port=8869 #客户端监控 API 的端口(默认是 8719)

-Dproject.name=sentinel-name #指定应用的名称

-Dcsp.sentinel.heartbeat.client.ip=192.168.11.50 #客户端指定心跳包中本机的 IP

jar包启动的方式

java -Dproject.name=sentinel-name -Dcsp.sentinel.heartbeat.client.ip=192.168.11.50 -Dcsp.sentinel.api.port=8869 -Dcsp.sentinel.dashboard.server=192.168.11.47:8858 -jar sentinel-demo.jar

在代码中设置的方式

System.setProperty("project.name", "sentinel-name");
System.setProperty("csp.sentinel.heartbeat.client.ip", "192.168.11.50");
System.setProperty("csp.sentinel.api.port", "8869");
System.setProperty("csp.sentinel.dashboard.server", "192.168.11.47:8858");

idea配置的方式

在这里插入图片描述
在这里插入图片描述

pom的配置有两种方式,spring-cloud-starter-alibaba-sentinel包含sentinel全部的core和annotation等之类的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.11</version><relativePath/> <!-- lookup parent from repository --></parent><modelVersion>4.0.0</modelVersion><artifactId>sentinel-demo</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2021.0.4.0</version></dependency></dependencies>
</project>

pom.xml:简约包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.11</version><relativePath/> <!-- lookup parent from repository --></parent><modelVersion>4.0.0</modelVersion><artifactId>sentinel-demo</artifactId><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--sentinel核心库--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.5</version></dependency><!--如果要使用注解@SentinelResource--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj</artifactId><version>1.8.5</version></dependency><!--客户端接入控制台--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId><version>1.8.5</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version></dependency></dependencies>
</project>

使用编写代码的方式实现(流控降级)熔断,不使用dashboard,这是流控规则,保存在代码中

package com.test.order.controller;import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.Tracer;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;/*** @Description:* @Author: xu* @Data: 2024-2024/3/29-16* @Version: V1.0*/
@RestController
@RequestMapping("/order")
public class OrderController {private final static String resourceName = "flow";private static Logger log = LoggerFactory.getLogger(OrderController.class);@RequestMapping("/flow")public String flow() {System.out.println("aaaaaaaaaaaaaaaaa");Entry entry = null;//务必保证 finally 会被执行try {// 资源名可使用任意有业务语义的字符串开启资源的保护entry = SphU.entry(resourceName);//被保护的业务逻辑method//do something...} catch (BlockException ex) {//资源访问阻止,被限流或被降级//Sentinel定义异常 流控规则,降级规则,热点参数规则。。服务降级(降级规则)//进行相应的处理操作log.info("block!!!");return "被流控了";} catch (Exception ex) {//若需要配置降级规则,需要通过这种方式记录业务异常RuntimeExceptionmock feign:fallbackTracer.traceEntry(ex, entry);} finally {//务必保证 exit,务必保证每个 entry 与 exit 配对if (entry != null) {entry.exit();}}return "flow";}@PostConstructprivate void initFlowQpsRule() {List<FlowRule> rules = new ArrayList<>();FlowRule rule = new FlowRule(resourceName);// set limit qps to 20rule.setCount(2);rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setLimitApp("default");rules.add(rule);FlowRuleManager.loadRules(rules);}}

可使用注解的方式简介编写@SentinelResource,使用@SentinelResource注意事项可以查看注解埋点官网

package com.test.order.controller;import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.Tracer;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;/*** @Description:* @Author: xu* @Data: 2024-2024/3/29-16* @Version: V1.0*/
@RestController
@RequestMapping("/order")
public class OrderController {private final static String resourceName = "flow";private static Logger log = LoggerFactory.getLogger(OrderController.class);//blockHandler / blockHandlerClass: blockHandler 对应处理 BlockException 的函数名称,可选项。// blockHandler 函数访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。// blockHandler 函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定 blockHandlerClass 为对应的类的 Class 对象,注意对应的函数必需为 static 函数,否则无法解析//fallback / fallbackClass:fallback 函数名称,可选项,用于在抛出异常的时候提供 fallback 处理逻辑。// fallback 函数可以针对所有类型的异常//blockHandler的优先级比fallback高,官网中都有讲解 https://github.com/alibaba/Sentinel/wiki/%E6%B3%A8%E8%A7%A3%E6%94%AF%E6%8C%81@RequestMapping("/flow")@SentinelResource(value = resourceName, blockHandler = "exceptionHandler",fallback = "helloFallback")public String flow() {System.out.println("aaaaaaaaaaaaaaaaa");//被保护的业务逻辑method//do something...return "flow";}public String exceptionHandler(BlockException ex) {// Do some log here.ex.printStackTrace();return "被流控了";}// Fallback 函数,函数签名与原函数一致或加一个 Throwable 类型的参数.public String helloFallback(long s) {return String.format("Halooooo %d", s);}@PostConstructprivate void initFlowQpsRule() {List<FlowRule> rules = new ArrayList<>();FlowRule rule = new FlowRule(resourceName);// set limit qps to 20rule.setCount(2);rule.setGrade(RuleConstant.FLOW_GRADE_QPS);rule.setLimitApp("default");rules.add(rule);FlowRuleManager.loadRules(rules);}}

这是降级规则,保存在代码中

@PostConstruct
private void initDegradeRule() {List<DegradeRule> rules = new ArrayList<>();DegradeRule rule = new DegradeRule();rule.setResource(resourceName);// set threshold RT, 10 msrule.setCount(10);rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);rule.setTimeWindow(10);rules.add(rule);DegradeRuleManager.loadRules(rules);
}@RequestMapping("/degrade")@SentinelResource(value = resourceName, entryType = EntryType.IN,  blockHandler = "exceptionHandler2", fallback = "helloFallback2")public String degrade() {throw new RuntimeException("异常");}

其他的规则都是类似的原理可以查看官网使用

整合后可以在界面查看

在这里插入图片描述

如果项目是springcloud项目,可以直接在yml配置

server:port: 8079
spring:application:name: order-sentinelcloud:sentinel:transport:dashboard: 192.168.11.47:8858#注意:yml配置client-ip 是本地ip才行client-ip: 192.168.11.50port: 8719

pom.xml依赖

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/618526.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PostgreSQL入门到实战-第二十四弹

PostgreSQL入门到实战 PostgreSQL中表连接操作(八)官网地址PostgreSQL概述PostgreSQL中CROSS JOIN命令理论PostgreSQL中CROSS JOIN命令实战更新计划 PostgreSQL中表连接操作(八) 使用PostgreSQL CROSS JOIN从连接的表中生成行的笛卡尔乘积。 官网地址 声明: 由于操作系统, 版…

AI预测小分子与蛋白的相关特征: MegaMolBART, MoFlow,ESM-1, ESM-2

1、小分子:MegaMolBART, MoFlow 1)MegaMolBART https://github.com/NVIDIA/MegaMolBART 基于 SMILES 的小分子药物发现与化学信息学深度学习模型。 2)MoFlow https://github.com/calvin-zcx/moflow 用flow流方式分子生成 2、蛋白质:ESM-1, ESM-2 https://github.com/fa…

Java GUI制作双人对打游戏(下)

文章目录 前言一、动画是怎么实现的呢&#xff1f;二、根据这个原理 代码是怎么实现的呢&#xff1f;二、代码部分1.角色1&#xff08;左侧&#xff09;2.角色2&#xff08;右侧&#xff09;补充 最终的包结构效果图&#xff1a; 前言 接上篇&#xff1a;如何在IDEA中使用Java …

Web前端 Javascript笔记3

1、垃圾回收机制 内存中的生命周期 1、内存分配 2、内存使用&#xff08;读写&#xff09; 3、内存回收&#xff0c;使用完毕之后&#xff0c;垃圾回收器完成 内存泄漏&#xff1a;该回收的&#xff0c;由于某些未知因素&#xff0c;未释放&#xff0c;叫做内存泄漏 栈&#xf…

C# Window form 自定义控件的结构和设计(三)

C# Window form 自定义控件的结构和设计(三) 一、前面介绍了如何来创建第一个自定义的控件&#xff0c;以及一个测试程序。下面我们来看下如何在自定义控件中添加属性。 C#和其他.NET语言支持属性作为语言的第一类成员。把属性作为语言的基础属性有两点主要的有点&#xff1a…

PoE 技术

1 PoE 技术产生背景 随着 WLAN 、 VoIP 、网络视频监控等新业务的飞速发展,大量的无线 LAN 访问点、 IP 电话、 IP 网络摄像头等基于 IP 的终端出现在工业现场。这些设备通常数量众多、位置特殊 、 布线复杂、设备取电困难,其实施部署不仅消耗大量人力物力,…

karpathy building make more --- 1

1 Introduction 作为一个机器学习的小白&#xff0c;希望和karpathy 大神的这个课程&#xff0c;掌握机器学习的基础概念和方法。 2 任务 根据一个名字文件&#xff0c;做一个起名字的模型。 3 方案1 用统计的方法来实现&#xff0c;我们希望统计每个词的关联性&#xff0…

使用新一代一站式 AI Bot 开发平台扣子coze,搭建我的第一个AI Bot(前端魔法师) ,

目录 1.概述​ 2.功能与优势 3.使用扣子 4.人设与回复逻辑 5.添加插件 6.预览与调试 7.发布bot Store 8.环境大家体验&#xff08;给大家内置了比较屌的插件&#xff09; 9.推荐阅读&#xff1a; 1.概述​ 扣子是新一代一站式 AI Bot 开发平台。无论你是否有编程基础…

[Spring Cloud] (2)gateway全局异常捕捉统一返回值

文章目录 处理转发失败的情况全局参数同一返回格式操作消息对象AjaxResult返回值状态描述对象AjaxStatus返回值枚举接口层StatusCode 全局异常处理器自定义通用异常定一个自定义异常覆盖默认的异常处理自定义异常处理工具 在上一篇章时我们有了一个简单的gateway网关 [Spring C…

docker 安装 nginx + httpd + php-fpm

原文地址&#xff1a;http://www.taoluyuan.com/index.php/archives/30/#2 展示 1.安装 1.1安装docker 1.2安装nginx 1.3安装apache-httpd 1.4安装php-fpm 2.配置nginx反向代理 httpdphp-fmp 1.安装 1.1安装docker 移除旧的版本&#xff1a; sudo yum remove docker 安装…

启动nginx时报错:signal process started

解决方案&#xff0c;直接使用该命令启动&#xff0c;指向nginx.conf配置文件&#xff1a; nginx -c /www/wdlinux/nginx/conf/nginx.conf 启动成功&#xff1a;

产生死锁的四个必要条件

产生死锁的四个必要条件 互斥使用: 一个资源每次只能被一个线程使用。这意味着如果一个线程已经获取了某个资源&#xff08;比如锁&#xff09;&#xff0c;那么其他线程就必须等待&#xff0c;直到该线程释放资源。 不可抢占: 已经获得资源的线程在释放资源之前&#xff0c;不…