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网关的三个核心的概念

  1. 路由(route)路由信息的组成:由一个ID、一个目的URL、一组断言工厂、一组Filter组成。如果路由断言为真,说明请求URL和配置路由匹配。
  2. 断言(Predicate) Spring Cloud Gateway中的断言函数输入类型是Spring 5.0框架中的ServerWebExchange。Spring Cloud Gateway的断言函数允许开发者去定义匹配来自于Http Request中的任何信息比如请求头和参数。
  3. 过滤器(Filter) 一个标准的Spring WebFilter。 Spring Cloud Gateway中的Filter分为两种类型的Filter,分别是Gateway Filter和Global Filter。过滤器Filter将会对请求和响应进行修改处理。

3.2.3几种常见的断言方式

  1. 请求路径上的断言 path 路径
  2. 请求方式上的断言 Method 请求行
  3. 请求参数上的断言 Query 请求体,请求行
  4. 请求头上的断言 Head 请求头
  5. 时间上的断言 Before,After,Between

3.2.4常见的几种过滤的方法

  1. 请求行上添加或者删除路径
  2. 请求体上添加或者删除请求头的键值对
  3. 请求体中途添加或者删除请求的参数

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 阿里巴巴相关推荐

  1. springcloud阿里巴巴五大组件_如何无缝迁移 SpringCloud/Dubbo 应用到 Serverless 架构

    简介: 本文分为三部分来介绍,分别介绍微服务应用迁移到 SAE 的优势,如何迁移 SpringCloud/Dubbo 应用到 SAE 上,以及针对 SpringCloud 应用迁移的实践演示. 背景 ...

  2. springcloud阿里巴巴五大组件_认识SpringCloud

    上章我们了解了什么是微服务,所以本章来介绍微服务构架.目前在国内用到的微服务构架有SpringCloud和Dubbo,所以本章将对这两个构架的优缺点和特点进行比较. Dubbo,是阿里巴巴服务化治理的 ...

  3. SpringCloud阿里巴巴笔记

    微服务简介 1服务拆分 在Order服务中查询user服务,(首先在启动类中@bean注入RestTemplate对象),后调用如下 查询成功 2Eureka注册中心 1创建eureka-server ...

  4. 【十万字的SpringCloud,你不来看看】

    黑马笔记 目录 微服务和springcloud介绍 [1]服务集群 [2]技术导览 [3]认识微服务 1.单体架构 2.分布式架构 3.微服务是什么   解决分布式架构的缺点 [4]国内知名微服务治理 ...

  5. 狂神-SpringCloud笔记-总

    [笔记整理来源 B站UP主狂神说https://www.bilibili.com/video/BV1jJ411S7xr] 一.微服务与分布式架构 1.1分布式架构 将一个大的系统,划分为多个业务模块, ...

  6. 肝了很久,冰河整理出这份4万字的SpringCloud与SpringCloudAlibaba学习笔记!!

    写在前面 不少小伙伴让我整理下有关SpringCloud和SpringCloudAlibaba的知识点,经过3天的收集和整理,冰河整理出这份4万字的SpringCloud与SpringCloudAli ...

  7. 一、【SpringCloud】微服务与分布式架构

    狂神-SpringCloud笔记目录 文章目录 一.微服务与分布式架构 1.1分布式架构 1.2微服务架构 1.3分布式架构的四个核心问题 与解决方案 1.4 Spring Cloud 五大组件 1. ...

  8. 1.谷粒商城1-5文字版

    01.简介-项目介绍 我这个架构图呢 我先快速的给大家过一遍 大家知道将会学到什么就行了 ,那我们后来呢会有详细的去来介绍, 首先呢,我们除了常规的业务开发 , 比如我们开发后台管理系统也好,开发其他 ...

  9. 狂神说java java基础篇 学习笔记

    java基础的视频内容笔记都在这了 前言等字数非常长的章节,使用了AI语音识别成文字后修改的,有错漏欢迎提出 面对对象模块的按照自己的理解进行了内容修改,可以对比原视频内容理解,如有建议欢迎提出 前言 ...

  10. 搭建nacos集群启动时,报错Unable to start web server; nested exception is org.springframework.boot.web.server

    最近在学习springcloud阿里巴巴的使用,单机使用nacos启动时没有问题,修改了配置之后启动报错,如下 org.springframework.context.ApplicationConte ...

最新文章

  1. 简单的docker命令ubuntu系统
  2. ANDROID L日志系统——JAVAAPI与LIBLOG
  3. lambdas 排序_Java8 Lambdas:解释性能缺陷的排序
  4. brave浏览器_火狐联创、Java Script之父,居然也来倒腾区块链浏览器?
  5. 不懂函数能学c语言吗,不会函数能学C语言吗
  6. spark kafka java api_java实现spark streaming与kafka集成进行流式计算
  7. java利用poi导出数据到excel
  8. Visual Studio 最常用的13个快捷键
  9. pip 加速_如何将Numpy加速700倍?用 CuPy 呀
  10. Vue使用createWebHistory 页面刷新变成白页 解决
  11. vi/vim怎么对多行文字进行注释/取消注释
  12. 使用subs和evals函数对sympy中的符号进行赋值并且设置数值位数
  13. Python每天练习——小程序006
  14. 2D图片转3D模型软件介绍
  15. SD卡SPI模式入门教程
  16. Gitee的第一次使用(图文)
  17. 基于阿里云IOT Studio和STM32的电机远程监测设计
  18. Hadoop 2.7.2 分布式集群搭建-操作指南(不断更新)
  19. 大数据开发平台-数据同步服务
  20. 判断边界由1组成的最大正方形面积

热门文章

  1. python两个二维数组加法_python中利用numpy.array()实现俩个数值列表的对应相加方法...
  2. ubuntu18.04配置cuda(RTX3080Ti)
  3. 案例分析 - 考查点总览
  4. 2021年全球混凝土振动器收入大约337.3百万美元,预计2028年达到456百万美元
  5. 闪联突破:连接器将电脑变电视硬盘
  6. Cannot obtain ticket from http://fls.jetbrains-agent.com due to connectivity problem:Connection time
  7. 为什么有时候说产品经理是:背锅侠
  8. 字节跳动第三次笔试-抖音红人
  9. pagefault_disable的效果
  10. 如何培养计算机知识,如何给初次接触计算机的小孩普及计算机知识