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

自己做网站要不要钱网站开发项目中职责

自己做网站要不要钱,网站开发项目中职责,wordpress留言簿,网络规划设计师 招聘目录 1. 什么是 OpenFeign#xff1f; 2. OpenFeign 的功能升级 3. OpenFeign 内置的超时重试机制 3.1 配置超时重试 3.2 覆盖 Retryer 对象 4. 自定义超时重试机制 4.1 为什么需要自定义超时重试机制 4.2 如何自定义超时重试机制 5. OpenFeign 超时重试的底层原理 5…目录 1. 什么是 OpenFeign 2. OpenFeign 的功能升级 3. OpenFeign 内置的超时重试机制 3.1 配置超时重试 3.2 覆盖 Retryer 对象 4. 自定义超时重试机制 4.1 为什么需要自定义超时重试机制 4.2 如何自定义超时重试机制 5. OpenFeign 超时重试的底层原理 5.1 超时重试原理 1. 什么是 OpenFeign OpenFeign 是一款基于 Feign 的声明式的 Web 服务客户端它使得编写Web服务客户端变得更加容易。它可以帮助你轻松调用远程服务的工具。 【举个例子】 想象一下你在使用手机的微信和朋友聊天你只需要知道朋友的微信号就可以给他发消息不需要知道他的手机号或者其他复杂的信息。OpenFeign 也是这样它允许你在编写代码时只需要知道你想调用的服务的名字和需要交互的部分比如服务中的某个功能或接口你不需要处理底层的网络连接或者复杂的HTTP请求过程这些都由OpenFeign自动帮你完成。它提供了一种类似于调用本地方法的感觉来访问远程服务从而让开发者可以专注于编写业务代码而不是底层的网络通信细节。 2. OpenFeign 的功能升级 OpenFeign 在 Feign 的基础上还提供了增强、扩展功能 更好的集成SpringCloud组件 OpenFeign与Spring Cloud的其他组件如服务发现、负载均衡紧密集成它能够自动利用服务发现和负载均衡的功能无需额外配置。 支持FeignClient注解 OpenFeign引入了FeignClient注解使得声明式的客户端创建变得简单。你只需要在接口上使用FeignClient指定服务名即可而无需创建具体的RestTemplate或者使用URL硬编码远程服务调用。 错误处理改进 OpenFeign提供了更为人性化的错误处理方式。它允许你通过自定义错误解码器来对特定的错误响应进行处理。这样你可以捕捉并处理远程服务调用中的异常使得异常管理更加灵活和精确。报错信息也更加细化、明确了 更丰富的配置项 OpenFeign提供了比原生Feign更为详尽的配置项比如超时设置、重试策略。 3. OpenFeign 内置的超时重试机制 在微服务架构中服务之间是通过网络进行通信的而网络又是非常复杂和不稳定的所以在服务调用的过程中可能会失败或超时那么在这种情况下OpenFeign 就需要超时重试机制来解决了。 什么是超时重试 当你的服务请求因为网络问题或服务延迟等原因没能在预定时间内得到响应超市重试机制会帮你自动重新发送请求。就像你用浏览器打开网页如果一时加载不出来你可能会点击刷新重试。OpenFeign 的超时重试就是自动帮你做这件事尝试几次后如果还是不行就会告诉你请求失败。这样可以提高服务的可靠性防止因为网络不稳定、服务不可用、响应延迟等不确定性因素导致服务不可用。 OpenFeign 默认情况下是不会自动开启超时重试机制的所以想要使用超时重试功能需要手动配置 配置超时重试覆盖 Retryer 对象 后续的操作都是基于上篇博客中的案例进行演示在 SpringBoot 整合 Nacos 的案例中已经涵盖了 OpenFeign 的基础使用了不会的可以先去看看https://blog.csdn.net/xaiobit_hl/article/details/134142521 3.1 配置超时重试 spring:application:name: nacos-consumer-democloud:nacos:discovery:server-addr: localhost:8848username: nacospassword: nacosregister-enabled: false #消费者不需要将此服务注册到 nacosopenfeign:client:config:default: # 全局配置connect-timeout: 1000 # 连接超时时间毫秒read-timeout: 1000 # 读取的超时时间毫秒 3.2 覆盖 Retryer 对象 Configuration // 存储 Ioc public class RetryerConfig {Beanpublic Retryer retryer() {return new Retryer.Default(1000, // 重试间隔时间1000, // 最大重试间隔时间3 // 最大重试次数);} }PS设置的最大重试次数为 3 次最大重试间隔时间为 1s重试间隔时间是 1s。 修改服务提供者代码 配置信息里边设置的读取超时时间为 1 秒就是为了触发超时重试机制按道理来说这个时候我们的消费者就需要在接口里边 sleep 1秒为了更好的看见问题可以设置 1.5 秒 RestController RequestMapping(/user) public class UserController {Autowiredprivate ServletWebServerApplicationContext context;// 服务RequestMapping(/getnamebyid)public String getNameById(Integer id) throws InterruptedException {System.out.println(------- do provider getNameById method LocalDateTime.now());Thread.sleep(1500); // 休眠 1.5 sreturn provider-name- id | port: context.getWebServer().getPort();} }PS① 启动一个临时服务实例② 保护阈值设为 0 ③ 启动消费者。 如果有多个实例客户端默认的负载均衡是轮询会导致现象并不明显 如果有保护阈值也会导致现象更复杂所以搞一个服务实例保护阈值不要去设置。 使用 http://localhost:8080/getnamebyid?id2 获取服务 此时服务已经获取不到了 并且已经触发超时重试机制了打开服务提供者的控制台 总共打印了三次日志因为我们设置的最大重试次数就是 3。 为什么不是  4 次呢为什么日志的时间间隔是 2s 打印一次呢 ① 为什么不是打印 4 次 因为 Retryer 的 Default 方法源码中重试次数变量 attempt 是从 1 开始的然后核心方法 continueOrPropagate 中的 if 判断是当 attemp maxAttempts 时才抛出异常。 下标从 1 开始 if 判断 ② 为什么日志的时间间隔是 2s 打印一次呢   我们设置的连接超时时间是 1s此处肯定是能连的上所以跟 connect-timeout 没关系。 此处是因为我们设置的读取超时时间read-timeout是 1s并且我们设置了一个间隔时间也是 1s所以每次打印日志的间隔时间就是 2s。 4. 自定义超时重试机制 4.1 为什么需要自定义超时重试机制 因为 OPenFeign 内置的超时重试机制它的重试策略是固定次数的重试而这种策略在某些场景下效果并不理想。例如我们设置的重试次数为 3此时因为网络短暂抖动造成了服务调用失败而固定策略可能在网络恢复前就已经用完了所有的重试次数这样就导致重试机制的作用不大。有时候我们更需要的是指数增长的重试策略就像 TCP 的超时重传一样那种指数增长的重试策略更加的智能它会在每次重试失败后增加等待时间给网络或者服务更多的恢复时间并减少因短时间内多次重试对服务的潜在影响。 4.2 如何自定义超时重试机制 自定义超时重试类实现 Retryer 接口并重写 continueOrPropagate 方法设置配置文件 ① 自定义超时重试类指数增长 /*** 自定义超时重试类*/ public class CustomRetryer implements Retryer {private final int maxAttempts; // 最大尝试次数private final long backoff; // 重试间隔时间int attempt; // 当前重试次数public CustomRetryer() {this.maxAttempts 3;this.backoff 1000L;this.attempt 0;}Overridepublic void continueOrPropagate(RetryableException e) {if(attempt maxAttempts) {throw e;}long interval this.backoff;System.out.println(LocalDateTime.now() | 执行一次重试 interval);try {Thread.sleep(interval * attempt); // 指数增长} catch (InterruptedException ex) {throw new RuntimeException(ex);}}Overridepublic Retryer clone() {return new CustomRetryer();} }② 设置配置文件 retryer 后面写上自定义超时重试类的包名 类名。 启动服务实例和消费者并尝试获取服务报错后再查看控制台 1. 此处我设置了最大重传次数为 3 打印 4 次日志是因为我自定义的重试类的 attempt 变量从 0 开始的。 2. 观察日志与日志间的时间间隔从 2s - 3s - 4s最初 attempt 为 11*1 read-timeout 的 1s 所以就是 2s然后再试 1*2 read-timeout以此类推... 5. OpenFeign 超时重试的底层原理 想要搞懂 OpenFeign 超时重试的底层原理就得先搞清楚 OpenFeign 的底层实现 ① 加注解 在启动类或者配置类上添加 EnableFeignClients注解② 动态代理 这个注解会触发Spring框架的自动配置机制扫描所有标记有FeignClient的接口并为它们创建代理实例 ③ RequestTemplate 发送HTTP请求 此处的 RequeustTemplate 我们可以理解为 RestTemplate,因为他俩的目的相同。OpenFeign 不能直接发送 HTTP 请求它在动态代理里面做了一件事它将注解里面请求的路由地址拿出来然后就能拼出来一个 URL 请求的地址然后再使用 RequestTemplateRestTemplate去发送 HTTP 请求。 ④ RestTemplate 依靠 HTTP 框架实现 web 请求 把它理解为 RestTemplate RestTemplate 只是一个模板方法类它只是规定了一个调用的 API它底层并没有实现它依靠的是 HTTP 框架实现的 web 请求 阿帕奇的 HttpClient 框架 5.1 超时重试原理 所以我们的超时重试原理就是在 HttpClient 里边设置超时时间然后如果超时了还没获取到服务列表报错信息就会一步一步返回给上层最终给到 OpenFeign。 想要在了解的细致一些就可以去看看 OpenFeign 的底层源码 public Object invoke(Object[] argv) throws Throwable {RequestTemplate template this.buildTemplateFromArgs.create(argv);Request.Options options this.findOptions(argv);Retryer retryer this.retryer.clone();// 死循环,如果成功或者重试结束就返回 [通过throw终止while循环]while(true) {try {// 通过 Http Client 发起通信return this.executeAndDecode(template, options);} catch (RetryableException var9) {RetryableException e var9;try {// 判断是否重试retryer.continueOrPropagate(e);} catch (RetryableException var8) {Throwable cause var8.getCause();if (this.propagationPolicy ExceptionPropagationPolicy.UNWRAP cause ! null) {throw cause;}throw var8;}if (this.logLevel ! Logger.Level.NONE) {this.logger.logRetry(this.metadata.configKey(), this.logLevel);}}} }源码中使用 RequestTemplate 发送 HTTP 请求我们主要关注两个地方 this.executeAndDecode(template, options); // HttpClient 进行通信retryer.continueOrPropagate(e);  // 重试机制默认 / 自定义 所以OpenFeign 的重试机制是通过其内置的 Retryer 组件和底层的 HTTP 客户端实现的。 Retryer 组件提供了重试策略的逻辑实现而远程接口则通过 HTTP 客户端来完成调用
http://www.huolong8.cn/news/274304/

相关文章:

  • 网站建设地址 北京win2012服务器网站建设
  • 榕江网站建设做字的网站
  • 象屿做核放单的网站管理咨询公司需要的能力
  • 阳江公司网站建设台山网站开发
  • 分类信息网站建设计划关键词挖掘工具
  • 深圳网站搭建找哪里做电商网站用什么系统
  • 那个网站有题做网站推广论坛
  • 免费asp网站程序下载百度竞价价格查询
  • 公司创建的法制网站中国建设银行龙卡信用卡网站
  • 网站商城维护怎么做手机网站开发专业
  • 长安网站建设公司西楚房产网宿迁房产网
  • 做外贸网站哪家公司好如何做网站服务
  • dw做网站教程视频多语言外贸网站建设
  • 请将已备案网站接入访问黑龙江省城乡和住房建设厅网站
  • 网站建设意向书小程序定制开发要多久
  • 数据需求 网站建设网站建设后预期推广方式
  • 传媒网站源码带手机如何破解网站后台管理
  • 网站推广代运营国外购物网站欣赏
  • 电子商务网站建设公司织梦做英文网站出现乱码
  • 大连网站建设1000元从用户角度网站应该具备的条件
  • wordpress 付费主题 高级功能编辑器专业seo要多少钱
  • 住房建设部官方网站成都信用
  • 网站建设 企业观点深圳建设交易中心网站首页
  • 网站怎么做收录东莞seo优化seo关键词
  • 深圳商务网站建设国家企业信用信息公示系统广东
  • 网站的营销功能公司做网站找谁公司做网站找谁
  • 揭阳东莞网站建设建站宝盒手机版下载
  • c 网站开发宿迁华夏建设集团网站
  • 网站悬浮代码社交电商十大平台有哪些
  • 网站源码下载软件中国移动网络优化做什么的