springCloud 阿里巴巴
springClud 阿里巴巴
1.nacos的配置
1.nacos的单机启动 startup.cmd -m standalone windows启动sh startup.sh -m standalone linux启动macos的默认的访问路径 http://localhost:8848/nacos
注意:nacos如果不配置集群,如果不使用单机启动可能会报错
2.限流,降级,热点sentinel
2.1sentinel介绍,sentinel已经被打包成为了一个可以执行的jar包,在阿里的官网上面可以下载
以下是可执行文件的命令,包括启动的时候:1.这是监听端口,设置服务名
java -Dserver.port=8849 -Dcsp.sentinel.dashboard.server=localhost:8849 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.0.jar
2.2sentinel需要在bootstrap的配置
1.maven的客户端的依赖<!--监控与限流sentinel--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-cloud-actuator</artifactId></dependency>spring:cloud:sentinel:transport:port: 8099 #跟sentinel控制台交流的端口,随意指定一个未使用的端口即可dashboard: localhost:8180 #指定sentinel控制台的地址eager: true #如果访问该资源sentinel控制台才会显示,开启后不访问sentinel也会在控制台显示
1.在
2.3限流
1.阈值限流
2.关联限流
3.链路限制流(例如: 现在要有人在浏览A商品,有人准备购买A商品,不管是浏览A商品还是购买A商品都要对A商品进行查询,这个时候比如我可以对添加购物车这一条链路进行限流)
2.4降级
1.慢调用比例降级
所谓慢调用比例,就是我们自己给定一个慢调用的时间比如100ms,和一个慢调用的比例,比如是50%,也就是说在该资源被调用的过程中如果,响应时间大于100ms的情况入过大于50%那么该服务调用就是降级,也就是说在10次的请求中如果有五次请求的时间都是在100ms以上那么该资源的调用就会降级
2.异常处理降级
所谓的异常处理降级,就是该请求的处理过程中如果发生了异常情况的话,设置的异常比例比如为0.5,最小的请求数量为10,那么在十次的请求过程中如果发生了五次的异常的处理情况下,那么就要进行熔断的处理
2.5热点数据
所谓的热点数据的限流,降级主要是针对于具体的数据,也就是访问的参数进行限流降级处理,比如,我现在访问一个id=10的热点新闻数据,我将此请求中的参数设置为id=10那么的话,当平凡是的访问该数据的时候就进行限流
2.6.sentinel的数据的持久化
2.6.1与持久化到nacos配置中心
1)导入依赖
<!--将sentinel客户端的数据持久化到nacos的配置中心--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency>
2)在bootstrap中配置数据源
spring:cloud:sentinel:# nacos 持久化数据datasource:# 可配置多个规则# 可自定义key-流控规则dashboard-flow:nacos:server-addr: http:localhostdataId: ${spring.application.name}-flowfile-extension: jsonrule-type: flownamespace: ${spring.profiles.active}# 可自定义key-系统规则dashboard-system:nacos:server-addr: http:localhostdataId: ${spring.application.name}-systemfile-extension: jsonrule-type: systemnamespace: ${spring.profiles.active}
3)配置中心的配置
流控规则
[{// 资源名"resource": "/test",// 针对来源,若为 default 则不区分调用来源"limitApp": "default",// 限流阈值类型(1:QPS;0:并发线程数)"grade": 1,// 阈值"count": 1,// 是否是集群模式"clusterMode": false,// 流控效果(0:快速失败;1:Warm Up(预热模式);2:排队等待)"controlBehavior": 0,// 流控模式(0:直接;1:关联;2:链路)"strategy": 0,// 预热时间(秒,预热模式需要此参数)"warmUpPeriodSec": 10,// 超时时间(排队等待模式需要此参数)"maxQueueingTimeMs": 500,// 关联资源、入口资源(关联、链路模式)"refResource": "rrr"}
]
降级规则
根据实际的需要改变减少对应的参数即可
[{// 资源名"resource": "/test1","limitApp": "default",// 熔断策略(0:慢调用比例,1:异常比率,2:异常计数)"grade": 0,// 最大RT、比例阈值、异常数"count": 200,// 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入)"slowRatioThreshold": 0.2,// 最小请求数"minRequestAmount": 5,// 当单位统计时长(类中默认1000)"statIntervalMs": 1000,// 熔断时长"timeWindow": 10}
]
热点规则
根据实际的需要改变减少对应的参数即可
[{// 资源名"resource": "/test1",// 限流模式(QPS 模式,不可更改)"grade": 1,// 参数索引"paramIdx": 0,// 单机阈值"count": 13,// 统计窗口时长"durationInSec": 6,// 是否集群 默认false"clusterMode": 默认false,// "burstCount": 0,// 集群模式配置"clusterConfig": {// "fallbackToLocalWhenFail": true,// "flowId": 2,// "sampleCount": 10,// "thresholdType": 0,// "windowIntervalMs": 1000},// 流控效果(支持快速失败和匀速排队模式)"controlBehavior": 0,// "limitApp": "default",// "maxQueueingTimeMs": 0,// 高级选项"paramFlowItemList": [{// 参数类型"classType": "int",// 限流阈值"count": 222,// 参数值"object": "2"}]}
]
系统规则
负值表示没有阈值检查。不需要删除参数
[{// RT"avgRt": 1,// CPU 使用率"highestCpuUsage": -1,// LOAD"highestSystemLoad": -1,// 线程数"maxThread": -1,// 入口 QPS"qps": -1}
]
受权规则
[{// 资源名"resource": "sentinel_spring_web_context",// 流控应用"limitApp": "/test",// 授权类型(0代表白名单;1代表黑名单。)"strategy": 0}
]
3.Gateway网关
3.1配置网关
3.1.1配置网管需要加入的依赖
<!--springClud中网关的依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!--nacos服务的注册与发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
注意:nacos的服务的注册与发现的依赖并非必须的,但是如果gataway想要获取相关的服务,可以直接在服务注册发现中心进行配置,当然不配置网关的话也可,但是提供网关的服务的时候会变得异常的复杂,其次在进行负载均衡的时候,网管可以根据同一个服务找到相关的实例进行负载均衡
3.1.2配置网关中bootstrap配置文件中相关的配置
spring:cloud:gateway:routes:# 路由id,可以任意- id: user-service-route# 代理的服务地址#uri: http://127.0.0.1:9091# lb表示从eureka中获取具体服务uri: lb://user-service# 路由断言: 可以匹配映射路径predicates:#- Path=/user/**#- Path=/**- Path=/api/user/**filters:# 添加请求路径的前缀#- PrefixPath=/user#1表示过滤1个路径,2表示两个路径,以此类推- StripPrefix=1- MyParam=name# 默认过滤器,对所有路由都生效default-filters:- AddResponseHeader=X-Response-Foo, Bar- AddResponseHeader=abc-myname,heima#跨域配置globalcors:corsConfigurations:'[/**]':#allowedOrigins: * # 这种写法或者下面的都可以,*表示全部allowedOrigins:- "http://docs.spring.io"allowedMethods:- GET
3.1.3通过代码的方式配置路由
@Configuration
public class GateWayConfig {@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder routeLocatorBuilder) {RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();//下面是完整的添加路由机制RouteLocatorBuilder.Builder routes = routeLocatorBuilder.routes();return routes.route("roulte03", new Function<PredicateSpec, Route.AsyncBuilder>() {@Overridepublic Route.AsyncBuilder apply(PredicateSpec predicateSpec) {predicateSpec.query("username","zhangsan");//查询参数的断言predicateSpec.path("/user/**");//predicateSpec.header("token","admin"); //匹配请求头的断言//predicateSpec.before();添加时间的断言predicateSpec.query("username").filters(f -> {return f.addRequestParameter("password", "123456");//添加参数的的过滤器});Route.AsyncBuilder asyncBuilder = predicateSpec.uri("lb://jt-auth");return asyncBuilder;}}).build();//下面是简化版的路由的配置routes.route("path_rote_xiaozhi",r -> r.path("/guonei").uri("http://news.baidu.com/guonei")).build();return routes.build();}@Beanpublic RouteLocator customRouteLocator2(RouteLocatorBuilder builder) {RouteLocatorBuilder.Builder routes = builder.routes();routes.route("path_route_xiaozhi2", r -> r.path("/guoji").uri("http://news.baidu.com/guoji")).build();return routes.build();}
}
3.2网关的三个核心的概念
- 路由(route)路由信息的组成:由一个ID、一个目的URL、一组断言工厂、一组Filter组成。如果路由断言为真,说明请求URL和配置路由匹配。
- 断言(Predicate) Spring Cloud Gateway中的断言函数输入类型是Spring 5.0框架中的ServerWebExchange。Spring Cloud Gateway的断言函数允许开发者去定义匹配来自于Http Request中的任何信息比如请求头和参数。
- 过滤器(Filter) 一个标准的Spring WebFilter。 Spring Cloud Gateway中的Filter分为两种类型的Filter,分别是Gateway Filter和Global Filter。过滤器Filter将会对请求和响应进行修改处理。
3.2.3几种常见的断言方式
- 请求路径上的断言 path 路径
- 请求方式上的断言 Method 请求行
- 请求参数上的断言 Query 请求体,请求行
- 请求头上的断言 Head 请求头
- 时间上的断言 Before,After,Between
3.2.4常见的几种过滤的方法
- 请求行上添加或者删除路径
- 请求体上添加或者删除请求头的键值对
- 请求体中途添加或者删除请求的参数
3.2.5全局过滤器
3.2.6自定义过滤器
public class AuthGobalFilter implements GlobalFilter, Order {@Overridepublic Class<? extends Annotation> annotationType() {return null;}@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {return null;}@Overridepublic int value() {return 0;}
}
3.3网关层面的限流,将gateway与settinel结合起来
3.3.1加入sentinel与gateway-sentinel适配器之间的依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId><version>RELEASE</version></dependency>2.参数的设置,打开项目的配置
将vm-opton设置为:-Dcsp.sentinel.app.type=1
注意版本之间的控制
3.3.2.限流的规则有如下几种
阀值得类型:QPS 与 线程数
匹配的方式:精确,子串,正则
匹配的内容:clint-ip,head请求头,cookie缓存,URL请求的参数,Remote port 远程端口
自定义分组限流:通过分组的方式进行限流,但是这种方式只进行路径的匹配,不能进行参数的匹配
3.3.3自定义的限流之后的返回的值,下面是限流之后自定义的返回限流之后的效果,参考实例
@Configuration
public class GatewayReturnConfig {public GatewayReturnConfig(){GatewayCallbackManager.setBlockHandler(new BlockRequestHandler() {@Overridepublic Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable throwable) {ServerHttpResponse response = serverWebExchange.getResponse();String json="{\"code\":200,\"message\":\"您现在访问过于频繁,请稍后再访问\"}";Mono<ServerResponse> body = ServerResponse.ok().body(Mono.just(json), String.class);return body;}});}
}
springCloud 阿里巴巴相关推荐
- springcloud阿里巴巴五大组件_如何无缝迁移 SpringCloud/Dubbo 应用到 Serverless 架构
简介: 本文分为三部分来介绍,分别介绍微服务应用迁移到 SAE 的优势,如何迁移 SpringCloud/Dubbo 应用到 SAE 上,以及针对 SpringCloud 应用迁移的实践演示. 背景 ...
- springcloud阿里巴巴五大组件_认识SpringCloud
上章我们了解了什么是微服务,所以本章来介绍微服务构架.目前在国内用到的微服务构架有SpringCloud和Dubbo,所以本章将对这两个构架的优缺点和特点进行比较. Dubbo,是阿里巴巴服务化治理的 ...
- SpringCloud阿里巴巴笔记
微服务简介 1服务拆分 在Order服务中查询user服务,(首先在启动类中@bean注入RestTemplate对象),后调用如下 查询成功 2Eureka注册中心 1创建eureka-server ...
- 【十万字的SpringCloud,你不来看看】
黑马笔记 目录 微服务和springcloud介绍 [1]服务集群 [2]技术导览 [3]认识微服务 1.单体架构 2.分布式架构 3.微服务是什么 解决分布式架构的缺点 [4]国内知名微服务治理 ...
- 狂神-SpringCloud笔记-总
[笔记整理来源 B站UP主狂神说https://www.bilibili.com/video/BV1jJ411S7xr] 一.微服务与分布式架构 1.1分布式架构 将一个大的系统,划分为多个业务模块, ...
- 肝了很久,冰河整理出这份4万字的SpringCloud与SpringCloudAlibaba学习笔记!!
写在前面 不少小伙伴让我整理下有关SpringCloud和SpringCloudAlibaba的知识点,经过3天的收集和整理,冰河整理出这份4万字的SpringCloud与SpringCloudAli ...
- 一、【SpringCloud】微服务与分布式架构
狂神-SpringCloud笔记目录 文章目录 一.微服务与分布式架构 1.1分布式架构 1.2微服务架构 1.3分布式架构的四个核心问题 与解决方案 1.4 Spring Cloud 五大组件 1. ...
- 1.谷粒商城1-5文字版
01.简介-项目介绍 我这个架构图呢 我先快速的给大家过一遍 大家知道将会学到什么就行了 ,那我们后来呢会有详细的去来介绍, 首先呢,我们除了常规的业务开发 , 比如我们开发后台管理系统也好,开发其他 ...
- 狂神说java java基础篇 学习笔记
java基础的视频内容笔记都在这了 前言等字数非常长的章节,使用了AI语音识别成文字后修改的,有错漏欢迎提出 面对对象模块的按照自己的理解进行了内容修改,可以对比原视频内容理解,如有建议欢迎提出 前言 ...
- 搭建nacos集群启动时,报错Unable to start web server; nested exception is org.springframework.boot.web.server
最近在学习springcloud阿里巴巴的使用,单机使用nacos启动时没有问题,修改了配置之后启动报错,如下 org.springframework.context.ApplicationConte ...
最新文章
- 简单的docker命令ubuntu系统
- ANDROID L日志系统——JAVAAPI与LIBLOG
- lambdas 排序_Java8 Lambdas:解释性能缺陷的排序
- brave浏览器_火狐联创、Java Script之父,居然也来倒腾区块链浏览器?
- 不懂函数能学c语言吗,不会函数能学C语言吗
- spark kafka java api_java实现spark streaming与kafka集成进行流式计算
- java利用poi导出数据到excel
- Visual Studio 最常用的13个快捷键
- pip 加速_如何将Numpy加速700倍?用 CuPy 呀
- Vue使用createWebHistory 页面刷新变成白页 解决
- vi/vim怎么对多行文字进行注释/取消注释
- 使用subs和evals函数对sympy中的符号进行赋值并且设置数值位数
- Python每天练习——小程序006
- 2D图片转3D模型软件介绍
- SD卡SPI模式入门教程
- Gitee的第一次使用(图文)
- 基于阿里云IOT Studio和STM32的电机远程监测设计
- Hadoop 2.7.2 分布式集群搭建-操作指南(不断更新)
- 大数据开发平台-数据同步服务
- 判断边界由1组成的最大正方形面积
热门文章
- python两个二维数组加法_python中利用numpy.array()实现俩个数值列表的对应相加方法...
- ubuntu18.04配置cuda(RTX3080Ti)
- 案例分析 - 考查点总览
- 2021年全球混凝土振动器收入大约337.3百万美元,预计2028年达到456百万美元
- 闪联突破:连接器将电脑变电视硬盘
- Cannot obtain ticket from http://fls.jetbrains-agent.com due to connectivity problem:Connection time
- 为什么有时候说产品经理是:背锅侠
- 字节跳动第三次笔试-抖音红人
- pagefault_disable的效果
- 如何培养计算机知识,如何给初次接触计算机的小孩普及计算机知识