济南章丘网站建设,响应式网站布局,wordpress下载验证,网站建设与管理项目1项目规划文章目录 一、OpenFegin是什么#xff1f;二、基本使用三、超时重试机制4.自定义超时重传机制五、底层实现 一、OpenFegin是什么#xff1f;
OpenFeign的全称为Spring Cloud OpenFeign(下文简称OpenFeign),是Spring Cloud团队开发的一款基于 Feign的框架#xff0c;声明式W… 文章目录 一、OpenFegin是什么二、基本使用三、超时重试机制4.自定义超时重传机制五、底层实现 一、OpenFegin是什么
OpenFeign的全称为Spring Cloud OpenFeign(下文简称OpenFeign),是Spring Cloud团队开发的一款基于 Feign的框架声明式Web服务客户端。 而feign是Netflix开源的一个声明式的Web服务客户端它简化了基于HTTP的服务调用使得服务间的通信变 得更加简单和灵活。Fign通过定义接口、注解和动态代理等方式将服务调用的过程封装起来开发者只需要 定义服务接口而无需关心底层的HTTP请求和序列化等细节。
OpenFeign在Feign的基础上提供了以下增强和扩展功能 1.更好的集成Spring Cloud组件OpenFeign与Spring Cloud其他组件如服务发现、负载均衡等紧密集 成可以无缝地与其他Spring Cloud组件一起使用。 2.支持FeignClient注解OpenFeign入了FeignClient注解作为Feign客户端的标识可以方便地定义 和使用远程服务的声明式接口。 3.错误处理改进OpenFeign对异常的处理做了增强提供了更好的错误信息和异常处理机制使得开发者可以 更方便地进行错误处理。例如OpenFeign提供的错误解码器(DefaultErrorDecoder)和回退策略当服务端返 回错误响应或请求失败时OpenFeign会调用回退策略中的逻辑提供一个默认的处理结果)。 4.更丰富的配置项OpenFeign提供了丰富的配置选项可以对Feign客户端的行为进行灵活的配置例如超时 设置、重试策略等。
二、基本使用
基本使用在之前的nacos注册中心时已经演示 可以点击观看nacos注册中心
三、超时重试机制
在微服务架构中服务之间是通过网络进行通信的而网络是非常复杂性和不稳定的所以在调用服务时可能会失 败或超时那么在这种情况下我们就需要给OpenFeign配置超时重试机制了。
什么是超时重试 答超时重试是一种在网络通信中常用的策略用于处理请求在一定时间内未能得到响应或得到超时响应的情 况。当发起请求后如果在规定的时间内没有得到预期的响应就会触发超时重试机制重新发送请求。 超时重试的主要目的是提高请求的可靠性和稳定性以应对网络不稳定、服务不可用、响应延迟等不确定因素。
OpenFeign默认情况下是不会自动开启超时重试的所以想要开启超时重试需要通过以下2步来实现 1.配置超时重试 2.覆盖Retryer对象 openfeign:client:config:default:connect-timeout: 1000 # 连接超时时间read-timeout: 1000 # 读取超时时间Configuration // 将当前对象存储在 IoC 容器
public class RetryerConfig {Beanpublic Retryer retryer(){return new Retryer.Default(1000,1000,3);}
}
而这里的1000,1000,3 分别代表重试间隔时间最大重试间隔时间最大重试次数 RequestMapping(/getnamebyid)public String getNameById(Integer id) throws InterruptedException {System.out.println(-------------------- Do Provider getNameById method. LocalDateTime.now());Thread.sleep(1500);return provider-name- id | port: context.getWebServer().getPort();}设置的读取超时时间为1秒 我们手动让线程休眠1.5秒那么就会触发超时重传机制 结果是符合预期的
4.自定义超时重传机制
自定义超时重试机制的实现分为以下两步 1.自定义超时重试类实现Retryer接口并重写continueOrPropagate方法。 2.设置配置文件。
常见的超时重试策略有以下三种 1.固定间隔重试每次重试之间的时间间隔固定不变例如每次重试之间相隔1秒。 2.指数重试每次重试之间的时间间隔按指数递增。例如初始间隔为1秒每次重试后加倍即第一次1秒 第二次2秒第三次4秒以此类推。 3.随机间隔重试每次重试之间的时间间隔是随机的通过引入随机性来防止多个失败请求同时发生。例如每 次重试的时间间隔在一定范围内随机选择。 /*** 自定义超时重传类*/
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();}
} 可以看到重试时间符合我们的预期
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: 3000 # 读取超时时间retryer: com.example.consumer.config.CustomRetryer五、底层实现
OpenFeign超时的底层实现是通过配置底层的HTTP客户端来实现的。OpenFeign允许你在请求连接和读取数据 阶段设置超时时间具体的超时配置可以通过设置HTTP客户端的连接超时(connectTimeout)和读取超时 (readTimeout)来实现你可以在配置文件中设置超时参数。 OpenFeign底层的HTTP客户端可以使用Apache HttpClient或OkHttpClient来实现默认使用的是Apache HttpClient实现的。