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

网站团队建设网龙网络公司官网

网站团队建设,网龙网络公司官网,重庆装修公司哪家好,上海网站建设口碑最好的公司今天#xff0c;我们就使用 Sentinel 实现接口的限流#xff0c;并使用 Feign 整合 Sentinel 实现服务容错的功能#xff0c;让我们体验下微服务使用了服务容错功能的效果。 因为内容仅仅围绕着 SpringCloud Alibaba技术栈展开#xff0c;所以#xff0c;这里我们使用的服…今天我们就使用 Sentinel 实现接口的限流并使用 Feign 整合 Sentinel 实现服务容错的功能让我们体验下微服务使用了服务容错功能的效果。 因为内容仅仅围绕着 SpringCloud Alibaba技术栈展开所以这里我们使用的服务容错组件是阿里开源的 Sentinel。 当然能够实现服务容错功能的组件不仅仅有 Sentinel比如Hystrix 和 Resilience4J 也能够实现服务容错的目的。 1. 关于 Sentinel 随着微服务的流行服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性 1.1 Sentinel 的特征 丰富的应用场景Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景例如秒杀即突发流量控制在系统容量可以承受的范围、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据甚至 500 台以下规模的集群的汇总运行情况。广泛的开源生态Sentinel 提供开箱即用的与其它开源框架/库的整合模块例如与 SpringCloud、Apache Dubbo、gRPC、Quarkus 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。同时 Sentinel 提供 Java/Go/C 等多语言的原生实现。完善的 SPI 扩展机制Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等 1.2 Sentinel 的主要特性 Sentinel 分为两个部分: 核心库Java 客户端不依赖任何框架/库能够运行于所有 Java 运行时环境同时对 Dubbo /Spring Cloud 等框架也有较好的支持。控制台Dashboard基于 Spring Boot 开发打包后可以直接运行不需要额外的 Tomcat 等应用容器 2. 项目集成 Sentinel 在微服务项目中整合 Sentinel 是非常简单的只需要在项目的 pom.xml 文件中引入 Sentinel 的依赖即可。不过在使用 Sentinel 时需要安装 Sentinel 的控制台 2.1 安装 Sentinel 控制台 Sentinel 提供一个轻量级的控制台, 它提供机器发现、单机资源实时监控以及规则管理等功能 2.1.1 下载 sentinel-dashboard 到链接 下载链接 下载 Sentinel 控制台。我这里下载的是 sentinel-dashboard-1.8.5.jar 2.1.2 启动 sentinel-dashboard Sentinel 控制台下载完成后在本地启动 Sentinel 控制台如下所示 java -Dserver.port8888 -Dcsp.sentinel.dashboard.serverlocalhost:8888 -Dproject.namesentinel-dashboard -jar sentinel-dashboard-1.8.5.jar 2.1.3 访问 sentinel-dashboard 启动后在浏览器中输入 http://localhost:8888 访问 Sentinel 控制台如下所示 输入默认的用户名 sentinel 和密码 sentinel登录 Sentinel 控制台如下所示 至此Sentinel 控制台下载并启动成功 2.2 项目集成 Sentinel 1、在订单微服务的 shop-orde r的 pom.xml 文件中添加Sentinel的相关依赖如下所示 dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId /dependency2、在订单微服务的 shop-order 的 application.yml 文中加入 Sentinel 相关的配置如下所示 spring:cloud:sentinel:transport:port: 9999 #指定和Sentinel控制台交互的端口任意指定一个未使用的端口即可dashboard: 127.0.0.1:8888 #Sentinel控制台服务地址3、为了让大家直观的感受到 Sentinel 的功能这里我们先在订单微服务的 OrderController 类中新增一个测试接口如下所示 GetMapping(value /test_sentinel) public String testSentinel(){log.info(测试Sentinel);return sentinel; }4、启动订单微服务在浏览器中输入 http://localhost:8080/order/test_sentinel 访问在订单微服务中新增的接口。 5、刷新 Sentinel 页面会发现已经显示了订单微服务的菜单如下所示 这里注意一下 注意直接启动订单微服务和 Sentinel会发现 Sentinel 中没有订单微服务的数据因为 Sentinel 是懒加载机制所以需要访问一下接口再去访问Sentinel 就有数据了 至此订单微服务成功集成了 Sentinel 2.3 集成 Sentinel 限流功能 对提交订单的接口限流 在提交订单的接口 http://localhost:8080/order/submit_order 上实现限流步骤如下 1、首先访问下提交订单的接口 http://localhost:8080/order/submit_order 使得 Sentinel 中能够捕获到提交订单的接口并点击操作中的 流控 按钮如下所示 2、在新增流控规则显示框中的 QPS 单机阈值设置为 1点击新增按钮如下所示 3、在浏览器中不断刷新 http://localhost:8080/order/submit_order? userId1001productId1001count1 使得每秒访问的频率超过 1 次会被 Sentinel 限流如下所示 至此项目中集成了 Sentinel 并使用 Sentinel 实现了接口的限流。 3. Feign 整合 Sentinel 实现容错 我们之前在项目中集成了 Sentinel并使用Sentinel实现了限流如果订单微服务的下游服务比如用户微服务和商品微服务出现故障无法访问时那订单微服务该如何实现服务容错呢使用Sentinel就可以轻松实现 3.1 添加依赖并开启支持 1、在订单微服务的 shop-order 的 pom.xml 文件中添加 Sentinel 的相关依赖如下所示 dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId /dependency2、在订单微服务的 application.yml 文件中添加如下配置开启 Feign 对 Sentinel 的支持 feign:sentinel:enabled: true3.2 为远程调用实现容错 需要在订单微服务 shop-order 中为远程调用接口实现容错方法。 1、这里先为用户微服务实现容错。在订单微服务中新建 com.zzc.order.feign.fallback 包并在此包下创建 UserServiceFallBack 类实现 UserService 接口用于调用用户微服务的容错类如下所示 Component public class UserServiceFallBack implements UserService {Overridepublic User getUser(Long uid) {User user new User();user.setId(-1L);return user;}}注意 容错类需要实现一个被容错的接口并实现这个接口的方法 2、指定容错类。在订单微服务的 com.zzc.order.feign.UserService 接口上的 FeignClient 注解上指定容错类如下所示 FeignClient(value server-user, fallback UserServiceFallBack.class) public interface UserService {GetMapping(value /user/get/{uid})User getUser(PathVariable(uid) Long uid);}3、修改订单微服务的业务实现类中提交订单的业务方法如下所示 // ... if (user null){throw new RuntimeException(未获取到用户信息: JSONObject.toJSONString(orderParamVo)); } if (user.getId() -1){throw new RuntimeException(触发了用户微服务的容错逻辑: JSONObject.toJSONString(orderParamVo)); } Product product productService.getProduct(orderParamVo.getProductId()); if (product null){throw new RuntimeException(未获取到商品信息: JSONObject.toJSONString(orderParamVo)); } if (product.getId() -1){throw new RuntimeException(触发了商品微服务的容错逻辑: JSONObject.toJSONString(orderParamVo)); } // ... ResultInteger result productService.updateCount(orderParamVo.getProductId(), orderParamVo.getCount()); if (result.getCode() ! HttpCode.SUCCESS){throw new RuntimeException(库存扣减失败); } if (result.getCode() 1001){throw new RuntimeException(触发了商品微服务的容错逻辑: JSONObject.toJSONString(orderParamVo)); }可以看到修改后的提交订单的业务方法主要增加了服务容错的判断逻辑 至此我们在项目中使用Sentinel实现了服务容错的功能 3.3 测试服务容错 停掉所有的用户微服务和商品微服务也就是只启动订单微服务在浏览器中访问 http://localhost:8080/order/submit_order?userId1001productId1001count1 结果如下所示 当然读者也可以测试只启动用户、订单微服务商品、订单微服务。 返回的原始数据 触发了用户微服务的容错逻辑: {“count”:1,“empty”:false,“productId”:1001,“userId”:1001} 说明项目集成Sentinel成功实现了服务的容错功能 代码地址 代码已经上传至码云码云地址 其中数据库文件位于 db 文件夹下。
http://www.dnsts.com.cn/news/56655.html

相关文章:

  • 中交上航建设网站sem推广
  • 重庆网站建设及推广公司百度指数查询官网入口登录
  • 做平台的网站有哪些内容一键做单页网站
  • 网站开发最适合的浏览器网页设计创建站点教程
  • 襄阳做网站价格凡科是大厂吗
  • 山西做网站多少钱建设企业网站价格
  • 昌平网站建设哪家强wordpress按装教程
  • 网站怎做百度代码统计网站发布的方法有几种
  • 如何建立本站站点网站建设网站网页模板
  • ps软件推荐常州市网站优化
  • 淄博企业网站建设哪家专业国外包装设计网站
  • 网站空间年费WordPress模板资源下载站
  • react网站开发实战制作网页的工具主要有哪些
  • 常德规划建设局网站苏州姑苏区专业做网站
  • 网站建设技术方面的论文手绘风网站
  • 什么网站做全景效果图好企业建设网
  • 技术支持 骏域网站建设专家佛山做家政的在哪些网站推广
  • 效果好的手机网站建设深圳做义工的网站
  • 厂字型布局网站网站未备案会怎么样
  • 网站管理平台有哪些跨境电商网站模板
  • 电子商务网站建设与管理课后习题网络营销的特点主要有
  • 建一个o2o网站织梦的手机端网站
  • 南京比较有名的广告公司seo计费系统源码
  • 寿宁县建设局网站免费wordpress网站
  • 网站开发原型 图中国制造网
  • 福建省住房和建设厅网站玩具外贸好做吗
  • 协和医院网站建设目标网站策划主要做什么工作
  • vs2010网站开发网站浮动条
  • 政务中心建设网站wordpress文章上传视频
  • 优酷土豆网站建设网站建设行吗