sentinel服务保护

embedded/2024/11/18 21:47:54/

一、整合sentinel

1、下载并启动sentinel

启动命令(默认是8080端口,因此修改端口号为8070)

java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.6.jar

2、引入依赖

<!--整合sentinel--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>2.1.0.RELEASE</version></dependency>

3、application.yaml增加sentinel配置

spring:cloud:sentinel:transport:dashboard: localhost:8070

4、重启微服务,并发起一些请求

二、利用sentinel实现请求的限流

2.1、流控

2.1.1、qps和并发线程数的区别

并发线程数:表示web请求进来服务器,tomcat开启几个线程来处理这些web请求。

qps:单位时间内,请求接口次数限制。

2.2、fallback

2.2.1、添加依赖

<dependency><groupId>io.github.openfeign</groupId><artifactId>feign-okhttp</artifactId></dependency>

2.2.2、application.yaml配置

feign:okhttp:enabled: truesentinel:enabled: true

2.2.3、写FallbackFactory接口的实现类

java">package com.niuniu.user.feignclient.fallback;import com.niuniu.user.feignclient.OrderClient;
import com.niuniu.user.model.Order;
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;import java.util.Collections;
import java.util.List;@Slf4j
public class OrderClientFallBackFactory implements FallbackFactory<OrderClient> {@Overridepublic OrderClient create(Throwable throwable) {log.error("OrderClient error!", throwable);return new OrderClient() {@Overridepublic List<Order> getOrdersByUserId(Long userId) {return Collections.emptyList();}};}
}

2.2.4、生成上一步实现类的对象

java">package com.niuniu.user.config;import com.niuniu.user.feignclient.fallback.OrderClientFallBackFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FallBackConfig {@Beanpublic OrderClientFallBackFactory orderClientFallBackFactory() {return new OrderClientFallBackFactory();}
}

2.2.5、feignclient接口增加fallbackFactory = OrderClientFallBackFactory.class

java">package com.niuniu.user.feignclient;import com.niuniu.common.config.DefaultFeignConfig;
import com.niuniu.user.feignclient.fallback.OrderClientFallBackFactory;
import com.niuniu.user.model.Order;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;import java.util.List;@Component
@FeignClient(value = "order-service", configuration = DefaultFeignConfig.class, fallbackFactory = OrderClientFallBackFactory.class)
public interface OrderClient {@GetMapping(value = "/order-service/order/getOrdersByUserId")List<Order> getOrdersByUserId(@RequestParam("userId") Long userId);
}

2.2.6、测试

修改变调用微服务的代码

java">/*** 根据用户查询订单* @param userId* @return*/@GetMapping("/getOrdersByUserId")public List<Order> getOrdersByUserId(@RequestParam(name = "userId") Long userId){log.info(UserContext.getUser().toString());int i = 1;System.out.println(i / 0);return orderMapper.getByUserId(userId);}

2.3、服务熔断


http://www.ppmy.cn/embedded/138628.html

相关文章

【C++】引用(reference)

引用是对一个变量或者对象取的别名 定义&#xff1a;真名的数据类型& 别名 真名; 既然是对一个变量或者对象取别名&#xff0c;那就得先有变量或对象&#xff0c;不能凭空取一个别名。也就是定义引用必须初始化。 对引用的操作和对引用对应的变量的操作是完全等价的引用…

C++: string(二)

✨✨ 欢迎大家来到我的文章✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 分类专栏&#xff1a;c 我的主页&#xff1a;tyler s blog 文章目录 一 string的成员函数1 insert2 resize3assign4erase5replace6 find(1) find(2)rfind…

用 Python 从零开始创建神经网络(八):梯度、偏导数和链式法则

梯度、偏导数和链式法则 引言1. 偏导数2. 和的偏导数3. 乘法的偏导数4. Max 的偏导数5. 梯度&#xff08;The Gradient&#xff09;6. 链式法则&#xff08;The Chain Rule&#xff09; 引言 在我们继续编写我们的神经网络代码之前&#xff0c;最后两个需要解决的难题是梯度和…

计算机网络 第二章:物理层

一、 基本概念 1.1 物理层作用、要解决的问题 第一章提到过&#xff0c;物理层要解决的问题是&#xff1a;用什么信号传输比特0和1&#xff1f; 现在的计算机网络有很多传输媒体&#xff0c;物理层的作用就是尽可能的屏蔽掉这些传输媒体的差异&#xff0c;这样就能更好地为数…

Node.js is Web Scale

点击“打开/下载题目”进去看看情况&#xff1a; 为了方便查看翻译成中文简体来看&#xff1a; emmm&#xff0c;看不懂什么意思&#xff0c;查看源代码&#xff0c;js表示是一段JavaScript代码&#xff0c;丢给AI分析一下&#xff1a; // server.js const express require(&…

【Linux:epoll】

目录 epoll与select、poll的区别&#xff1a; epoll操作函数&#xff1a; int epoll_create(int size); epoll_ctl: epoll_wait: epoll与select、poll的区别&#xff1a; select,poll底层是一个线性表的结构&#xff0c;而epoll是一个红黑树结构。epoll、poll不能跨平台…

CSS:导航栏三角箭头

用CSS实现导航流程图的样式。可根据自己的需求进行修改&#xff0c;代码精略的写了一下。 注&#xff1a;场景一和场景二在分辨率比较低的情况下会有一个1px的缝隙不太优雅&#xff0c;自行处理。有个方法是直接在每个外面包一个DIV&#xff0c;用动态样式设置底色。 场景一、…

【Qt】QtCreator安装安卓环境

1、简述 在QtCreator中安装安卓开发环境的步骤: 安装java安装安卓SDK安装android_openssl(非必须)2、安装java 2.1 版本要求 本人QtCreator版本为:Qt Creator 10.0.1;Qt版本为6.5 尝试java23,编译时失败; 尝试java19,编译成功; 未尝试java17(这个版本是长期支持版…