当前位置: 首页 > news >正文

app 门户网站网站项目框架

app 门户网站,网站项目框架,龙岩做网站公司有哪些,个人公司网站搭建目录 概述 环境说明 步骤 Sentinel服务端 Sentinel客户端 依赖 在客户端配置sentinel参数 测试 保护规则设置 设置资源名 设置默认的熔断规则 RestTemplate的流控规则 Feign的流控规则 概述 微服务有很多互相调用的服务#xff0c;构成一系列的调用链路#xf…目录 概述 环境说明 步骤 Sentinel服务端 Sentinel客户端 依赖 在客户端配置sentinel参数 测试 保护规则设置 设置资源名 设置默认的熔断规则 RestTemplate的流控规则 Feign的流控规则 概述 微服务有很多互相调用的服务构成一系列的调用链路如果调用链路中某个服务失效或者网络堵塞等问题而有较多请求都需要调用有问题的服务时这是就会造成多个服务的大面积失效造成服务“雪崩”效应。 服务“雪崩”的根本原因在于服务之间的强依赖为了预防服务“雪崩”这一问题可以做好服务隔离、服务熔断降级、服务限流。 服务隔离当某个服务故障时不波及其他模块不影响整体服务。 服务熔断当下游服务因为请求压力过大造成响应慢或响应失败时上游服务为了保护系统暂时切断对下游服务的调用直接返回一个降级的内容从而保全整体系统。 服务限流限制系统的输入和输出达到保护系统的目的例如限制请求速率超出的请求不处理或者暂缓处理或降级处理。 本文介绍的服务熔断组件是Sentinel Sentinel和Hystrix的对比 对比项目SentinelHystrix隔离策略信号量隔离线程池隔离/信号量隔离熔断策略基于响应时间或失败比例基于失败比例实时指标实现滑动窗口信号量隔离规则配置支持多种数据源支持多种数据源扩展性多个扩展点插件形式基于注解的支持支持支持限流基于QPS支持基于调用关系的限流支持流量整形支持慢启动、匀速器模式不支持系统负载保护支持不支持控制台开箱即用可配置规则、秒级监控、机器发现等不完善 本文的操作是在 服务熔断保护实践--Hystrix 的基础上进行。   环境说明 jdk1.8 maven3.6.3 mysql8 spring cloud2021.0.8 spring boot2.7.12 idea2022 步骤 Sentinel服务端 下载Sentinel服务jar包 cmd进入jar包所在目录 使用java -jar命令启动 D:\soft\sentineljava -jar sentinel-dashboard-1.8.6.jar 浏览器访问localhost:8080 输入用户名/密码sentinel/sentinel 进入到Sentinel控制台 Sentinel客户端 依赖 在父工程声明spring-cloud-alibaba依赖注意在dependencyManagement里声明 dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion2021.0.4.0/versiontypepom/typescopeimport/scope/dependency 在sentinel客户端的服务order-service、order-service-feign_hystrix 引入sentinel依赖 !--引入sentinel-- dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId /dependency 刷新依赖 在客户端配置sentinel参数 application.yml配置sentinel服务控制台信息涉及到的客户端都加这里在order-service服务、order-service-feign_hystrix服务里加 spring:cloud:sentinel:transport:dashboard: localhost:8080 测试 启动eureka、product、order-service、order-service-feign_hystrix服务 浏览器访问 http://localhost:9002/order/buy/1 http://localhost:9003/order/buy/1 查看sentinel控制台首页下方看到两个服务 展开访问子选项 浏览器多次访问服务能看到实时监控如下 保护规则设置 在order-service服务中新建一个Controller类用于sentinel流控测试 由OrderController复制、修改得到Order1Controller package org.example.order.controller;import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import org.example.order.entity.Product; import org.example.order.feign.ProductFeignClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/order1) public class Order1Controller {Autowiredprivate ProductFeignClient productFeignClient;RequestMapping(value /buy/{id}, method RequestMethod.GET)public Product findById(PathVariable Long id){return productFeignClient.findById(id);}} Order1Controller添加降级方法 /*** 定义降级逻辑* 熔断执行的降级方法*/public Product orderBlockHandler(Long id){Product product new Product();product.setProductName(触发熔断的降级方法);return product;}/*** 定义降级逻辑* 抛出异常执行的降级方法*/public Product orderExceptionHandler(Long id){Product product new Product();product.setProductName(抛出异常执行的降级方法);return product;} 在请求的方法上方添加SentinelResource注解 /*** SentinelResource* blockHandler: 声明熔断时执行的降级方法限流熔断降级* fallback: 抛出异常执行的降级方法异常降级*/SentinelResource(blockHandler orderBlockHandler, fallback orderExceptionHandler)RequestMapping(value /buy/{id}, method RequestMethod.GET)public Product findById(PathVariable Long id){return productFeignClient.findById(id);} 修改product服务的findById方法注释掉模拟网络延迟的代码 启动eureka、product、order服务 多次访问order1接口方法 http://localhost:9002/order1/buy/1 浏览器访问Sentinel控制台 http://localhost:8080/#/dashboard/metric/service-order 看到实时监控数据如下 熟悉相关流控规则设置界面 点击如图流控按钮添加流控规则看到如下界面 点击熔断按钮看到如下界面 点击热点按钮看到如下界面 点击授权按钮看到如下界面 修改order-service服务Order1Controller类的findById方法添加如下代码 if(id ! 1){throw new RuntimeException(异常的id抛出异常);} 重启order-service服务 浏览器访问 http://localhost:9002/order1/buy/1 刷新sentinel控制台 点击添加熔断规则 访问正常访问 http://localhost:9002/order1/buy/1 访问异常访问 http://localhost:9002/order1/buy/2 触发异常降级方法按住Ctrl R组合键将异常访问次数超过设置阈值1 5s熔断时长内访问id为正常值1也返回的是异常降级方法 5s熔断时长后访问id为正常值1能正常访问了 设置资源名 资源名称默认为包名类名方法名 如何自定义资源名称方法如下 修改接口方法SentinelResource添加value findById设置 /*** SentinelResource* blockHandler: 声明熔断时调用的降级方法* fallback: 抛出异常执行的降级方法* value: 自定义资源名称默认 包名类名方法名*/SentinelResource(value findById,blockHandler orderBlockHandler, fallback orderExceptionHandler)RequestMapping(value /buy/{id}, method RequestMethod.GET)public Product findById(PathVariable Long id){ 重启order服务 发现资源名称变为了自定义的findById 同时发现一个问题在重启order服务后也清空了熔断规则问题 可以设置默认的熔断规则来解决这个问题。 设置默认的熔断规则 在order-service服务里配置默认的熔断规则 修改application.yml添加如下sentinel的datasource配置 spring:cloud:sentinel:datasource:ds:file:file: classpath:flowrule.jsondata-type: jsonrule-type: flow 在resources目录下添加flowrule.json文件 [{resource: orderFindById,controlBehavior: 0,count: 1,grade: 1,limitApp: default,strategy: 0} ] 一条限流规则主要由下面几个因素组成 resource资源名即限流规则的作用对象 count: 限流阈值 grade: 限流阈值类型QPS 或并发线程数 limitApp: 流控针对的调用来源若为 default 则不区分调用来源 strategy: 调用关系限流策略 controlBehavior: 流量控制效果直接拒绝、Warm Up、匀速排队 这些值可以参考RuleConstant.class双击shift 搜索RuleConstant找到RuleConstant.class 例如 controlBehavior0 代表为默认的流量控制 直接拒绝或快速失败 controlBehavior1代码WARN UP(预热) 重启order服务 访问服务 查看Sentinel控制台能看到默认的流控规则了。 设置默认的熔断规则总结 通用的流控规则在方法上方添加注解SentinelResource(value findById,blockHandler orderBlockHandler, fallback orderExceptionHandler)同时编写对应的降级方法。 RestTemplate的流控规则 修改order服务 LoadBalanced Bean SentinelRestTemplate(fallback handleFallback, fallbackClass ExceptionUtil.class, blockHandlerhandleBlock,blockHandlerClassExceptionUtil.class) public RestTemplate restTemplate(){return new RestTemplate(); } SentinelRestTemplate说明 异常降级 fallback异常降级方法 fallbackClass异常降级类 限流降级 blockHandler限流降级方法 blockHandlerClass限流降级类 添加异常类 package org.example.order.exception;import com.alibaba.cloud.sentinel.rest.SentinelClientHttpResponse; import com.alibaba.csp.sentinel.slots.block.BlockException; import com.alibaba.fastjson.JSON; import org.example.order.entity.Product; import org.springframework.http.HttpRequest; import org.springframework.http.client.ClientHttpRequestExecution;public class ExceptionUtil {//限流熔断业务逻辑public static SentinelClientHttpResponse handleBlock(HttpRequest request, byte[] body,ClientHttpRequestExecution execution, BlockException ex) {System.err.println(Oops: ex.getClass().getCanonicalName());Product product new Product();product.setProductName(限流熔断降级);return new SentinelClientHttpResponse(JSON.toJSONString(product));}//异常熔断业务逻辑public static SentinelClientHttpResponse handleFallback(HttpRequest request, byte[] body,ClientHttpRequestExecution execution, BlockException ex) {System.err.println(fallback: ex.getClass().getCanonicalName());Product product new Product();product.setProductName(异常熔断降级);return new SentinelClientHttpResponse(JSON.toJSONString(product));} } 查看sentinel配置SentinelProperties.class 修改sentinel配置使得SpringCloud应用启动时直接与Sentinel建立心跳连接,访问sentinel 控制台就可以看到服务连接情况不需要第一次访问应用的某个接口时才连接sentinel。 spring.cloud.sentinel.eager true 复制Order1Controller得到Order2Controller修改代码后如下 package org.example.order.controller;import org.example.order.entity.Product; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;RestController RequestMapping(/order2) public class Order2Controller {Autowiredprivate RestTemplate restTemplate;RequestMapping(value /buy/{id}, method RequestMethod.GET)public Product findById(PathVariable Long id){if(id ! 1){throw new RuntimeException(异常的id抛出异常);}return restTemplate.getForObject(http://service-product/product/1, Product.class);} } 启动eureka、product、order服务 访问sentinel控制台直接能看到服务 访问 添加流控规则 测试 访问1次没有触发流控规则能正常访问到数据 http://localhost:9002/order2/buy/1 多次访问触发流控规则调用了降级方法 控制台显示显示如下 确实是ExceptionUtil的信息 RestTemplate的流控规则总结 RestTemplate的Bean上方添加注解SentinelRestTemplate 添加异常处理的类 Feign的流控规则 在order-service-feign_hystrix服务修改 在feign中开启sentinel熔断 feign:# 在feign中开启hystrix熔断#circuitbreaker:# enabled: true# 在feign中开启sentinel熔断sentinel:enabled: true 配置FeignClient 和使用Hystrix的方式一致需要配置FeignClient接口以及通过 fallback 指定熔断降级方法 启动eureka、product、order-service-feign_hystrix服务 测试 浏览器访问 查看sentinel控制台 添加流控规则 访问次数小于阈值正常返回数据 多次访问超过阈值触发了Feign熔断的降级方法 Feign的流控规则总结 添加依赖 在feign中开启sentinel熔断支持 配置FeignClient接口及实现类里定义熔断方法 完成enjoy it!
http://www.w-s-a.com/news/909315/

相关文章:

  • 做网站视频网站备案 新闻审批号
  • 织梦网站怎么居中视频网站开发与制作
  • 网站上海备案佛山网站seo哪家好
  • 品牌形象网站有哪些珠海市区工商年报在哪个网站做
  • 注册域名不建设网站seo外包服务方案
  • 如何进行外贸网站建设wordpress文章输入密码可见
  • 政务网站建设索引常州做网站信息
  • 南宁做网站找哪家好wordpress 更改首页
  • 一个人在家做网站建设品牌策划流程
  • 小网站广告投放wordpress页面添加js
  • 仿制别人的竞价网站做竞价犯法吗wordpress添加版块
  • wordpress主题 站长互联网站备案表
  • 广州品牌策划公司排行南宁seo网络推广公司
  • 营销型网站图片肯德基网站开发
  • 网站的外链是什么wordpress开启菜单
  • 文字字体是什么网站西安博达网站建设
  • 北京南昌网站建设网站查看空间商
  • 网站建设人员职责分布乐清市网站建设设计
  • 网站建设etw网站建设陕西
  • 网站文章页内链结构不好可以改吗wordpress英文模板下载
  • 北京天通苑 做网站哈尔滨快速网站排名
  • 网站开发负责人是什么职位试剂网站建设
  • 什么是展示型网站wordpress链接视频
  • 佳木斯城乡建设局网站过年做哪个网站能致富
  • 石家庄快速网站搭建设计公司属于什么企业
  • 中小学智慧校园建设平台网站sem竞价推广
  • 想创建一个网站官方网站建设推广
  • 江门网站优化民间it网站建设
  • 科研实验室网站建设wordpress加载模板
  • 用r做简易的网站软件园二期做网站的公司