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

网页背景做的比较好的网站百度官方平台

网页背景做的比较好的网站,百度官方平台,企业电子商务网站有哪些功能,佛山做优化的公司哪家好在微服务架构中,服务之间的通信是非常频繁的。而使用OpenFeign可以极大简化微服务之间的HTTP通信。但在复杂的分布式系统中,服务之间的调用可能会因为网络问题、服务故障等原因而失败。因此,实现服务调用的重试机制显得尤为重要。Resilience4…

在微服务架构中,服务之间的通信是非常频繁的。而使用OpenFeign可以极大简化微服务之间的HTTP通信。但在复杂的分布式系统中,服务之间的调用可能会因为网络问题、服务故障等原因而失败。因此,实现服务调用的重试机制显得尤为重要。Resilience4j是一个功能强大的库,它提供了多种容错机制,包括重试(Retry)、熔断(CircuitBreaker)、限流(RateLimiter)等。本篇文章将详细介绍如何在Spring Cloud中使用Resilience4j Retry对OpenFeign进行重试。

一、Resilience4j Retry原理 

Resilience4j的Retry模块允许在调用失败时进行自动重试。它支持以下几种特性:

  • 自定义重试次数:可以配置最大重试次数。
  • 自定义等待时间:可以配置每次重试之间的等待时间。
  • 重试条件:可以配置哪些异常类型触发重试。

Resilience4j Retry的工作流程如下:

  1. 方法调用:对目标方法进行调用。
  2. 异常捕获:如果目标方法抛出配置的异常,则捕获该异常。
  3. 重试判断:判断是否满足重试条件以及重试次数是否已达到上限。
  4. 重试等待:如果满足重试条件且重试次数未达到上限,则等待配置的时间后再次尝试调用。
  5. 降级处理:如果重试次数达到上限,依然无法成功调用,则执行降级处理逻辑。

 二、项目准备

首先,确保你的Spring Cloud项目中已经引入了必要的依赖,包括Spring Cloud OpenFeign和Resilience4j。

1. 引入依赖

pom.xml中添加以下依赖:

<!--resilience4j-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-circuitbreaker-resilience4j</artifactId>
</dependency>
<!-- 由于resilience4j需要AOP的包,所以必须导入AOP包 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2. 启用Feign Clients

确保你的Spring Boot应用程序主类上或者配置类上有@EnableFeignClients注解:

@Configuration
@EnableFeignClients(basePackages = "com.springcloud.sample.service")
@Import(FeignClientsConfiguration.class)
public class FeignConfiguration {/*** Set the Feign specific log level to log client REST requests.*/@Beanfeign.Logger.Level feignLoggerLevel() {return feign.Logger.Level.BASIC;}
}

三、配置Resilience4j Retry 

在你的application.ymlapplication.properties文件中配置Resilience4j的Retry策略。例如:

resilience4j.retry:configs:default:maxRetryAttempts: 3waitDuration: 2sretryExceptions:- org.springframework.web.client.HttpServerErrorException- java.io.IOException- feign.FeignException

解释:

  • maxRetryAttempts: 最大重试次数,这里设置为3次。
  • waitDuration: 每次重试之间的等待时间,这里设置为2秒。
  • retryExceptions: 配置哪些异常类型触发重试,这里包括HttpServerErrorExceptionIOException和FeignException

四、创建Feign客户端接口

创建一个Feign客户端接口来定义服务间的调用。例如:

@FeignClient("pay-service")
public interface PayService {@GetMapping("/pay/{id}")String payOrder(@PathVariable("id") Integer id);}

五、使用Retry注解

在调用Feign客户端的方法上添加@Retry注解,并创建一个fallback方法,用于定义服务调用失败后的降级处理逻辑。例如:

@RestController
public class OrderController {private static final Logger log = LoggerFactory.getLogger(OrderController.class);@Autowiredprivate PayService payService;@GetMapping("/order/{id}")@Retry(name = "paymentService", fallbackMethod = "fallback")public String order(@PathVariable("id") Integer id){log.info("Request Pay For Order id: {}", id);//通过open feign远程调用支付服务return payService.payOrder(id);}//fallback就是服务降级后的兜底处理方法public String fallback(Integer id,Throwable t) {log.info("Pay Service invoke failed for order ID: {}", id);log.error("Error: {}", t.getMessage());return "Pay Service Was Busy Now. Please try again later!";}
}

通过上述步骤,当payOrder方法调用失败时,Resilience4j的Retry机制将自动进行重试。如果重试次数超过配置的最大重试次数,Fallback类中的降级逻辑将会被执行。

六、测试

我我们通过关闭目标服务(pay-service)来测试重试机制是否正常工作。在目标服务不可用的情况下,请求/order/1接口,应该会看到系统进行多次重试,然后返回降级信息。

1. 在浏览器中访问order接口

http://localhost:8082/order/1

在访问以上地址后,浏览器并没有立刻返回结果,应该正在进行重试。因为我们已经关闭了目标服务,在等待几秒之后,浏览器返回了降级后的结果。如下:

2. 在控制台中验证是否重试过 

从上面的log中我们可以看出,一共请求了3次,和我们配置的maxRetryAttempts:3 一致,每次请求间隔2s,是我们在配置文件中指定的。并且,在最后一次重试任然失败后,走到了降级的方法 fallback中去,返回默认的降级结果。和我们预期的一样,retry能够正常工作。并且在retryExceptions中我们可以选择下游返回哪些异常时进行重试,我们在进行业务逻辑处理时可以灵活应用。

七、总结

通过上述配置和代码示例,我们在Spring Cloud项目中成功集成了Resilience4j的Retry机制,为OpenFeign的服务调用提供了自动重试功能。Resilience4j提供的灵活配置使得我们可以根据实际需求,精细控制重试策略,从而提高系统的可靠性和稳定性。

希望这篇文章能帮助你更好地理解和使用Resilience4j Retry对OpenFeign进行重试。如果你有任何问题或建议,欢迎在评论区留言交流。


文章转载自:
http://uncontemplated.rdbj.cn
http://impair.rdbj.cn
http://octroi.rdbj.cn
http://wo.rdbj.cn
http://retroverted.rdbj.cn
http://muntz.rdbj.cn
http://greeneland.rdbj.cn
http://pretensive.rdbj.cn
http://ultramontanism.rdbj.cn
http://syphilology.rdbj.cn
http://polyhalite.rdbj.cn
http://recalesce.rdbj.cn
http://pluton.rdbj.cn
http://vastitude.rdbj.cn
http://co2.rdbj.cn
http://rimless.rdbj.cn
http://acetaminophen.rdbj.cn
http://gaff.rdbj.cn
http://modistae.rdbj.cn
http://illuminatingly.rdbj.cn
http://paucity.rdbj.cn
http://packing.rdbj.cn
http://taffia.rdbj.cn
http://russophil.rdbj.cn
http://precursor.rdbj.cn
http://tort.rdbj.cn
http://clavel.rdbj.cn
http://interlinkage.rdbj.cn
http://fatheaded.rdbj.cn
http://pickax.rdbj.cn
http://preregistration.rdbj.cn
http://suspense.rdbj.cn
http://experiential.rdbj.cn
http://congenital.rdbj.cn
http://tranquillization.rdbj.cn
http://merchandise.rdbj.cn
http://polt.rdbj.cn
http://droog.rdbj.cn
http://kisan.rdbj.cn
http://pecorino.rdbj.cn
http://inviolately.rdbj.cn
http://wa.rdbj.cn
http://funereal.rdbj.cn
http://adjunctive.rdbj.cn
http://phillips.rdbj.cn
http://mithridatism.rdbj.cn
http://kotwali.rdbj.cn
http://preserver.rdbj.cn
http://heterocotylus.rdbj.cn
http://melos.rdbj.cn
http://lounder.rdbj.cn
http://campagna.rdbj.cn
http://cutwater.rdbj.cn
http://prorupt.rdbj.cn
http://goddam.rdbj.cn
http://fauxbourdon.rdbj.cn
http://dts.rdbj.cn
http://twangle.rdbj.cn
http://gainer.rdbj.cn
http://chalcogenide.rdbj.cn
http://haptometer.rdbj.cn
http://noisiness.rdbj.cn
http://discarnate.rdbj.cn
http://ega.rdbj.cn
http://scrupulously.rdbj.cn
http://actinomycosis.rdbj.cn
http://fibroelastosis.rdbj.cn
http://information.rdbj.cn
http://serialisation.rdbj.cn
http://coroneted.rdbj.cn
http://pinguin.rdbj.cn
http://zimbabwean.rdbj.cn
http://deflagrator.rdbj.cn
http://gyges.rdbj.cn
http://candid.rdbj.cn
http://wailful.rdbj.cn
http://xylem.rdbj.cn
http://baloney.rdbj.cn
http://transtainer.rdbj.cn
http://overrigid.rdbj.cn
http://superannuated.rdbj.cn
http://tombac.rdbj.cn
http://anal.rdbj.cn
http://butskellism.rdbj.cn
http://diproton.rdbj.cn
http://weeder.rdbj.cn
http://dragsman.rdbj.cn
http://duluth.rdbj.cn
http://smartdrive.rdbj.cn
http://cardinality.rdbj.cn
http://limuloid.rdbj.cn
http://lawsoniana.rdbj.cn
http://wallhanging.rdbj.cn
http://gcmg.rdbj.cn
http://bole.rdbj.cn
http://appendectomy.rdbj.cn
http://interzone.rdbj.cn
http://garbiologist.rdbj.cn
http://hypotyposis.rdbj.cn
http://myopy.rdbj.cn
http://www.dt0577.cn/news/90426.html

相关文章:

  • 个性网站首页在线推广企业网站的方法有哪些
  • 自己做外贸网站济南优化网站的哪家好
  • 局域网里做网站全国疫情高峰时间表最新
  • 自助建站系统php网站seo优化8888
  • 建设网站英文推广价格一般多少
  • 网站做优化需要多少钱宁波seo推荐优化
  • dw做的网站怎么做后台免费网站怎么做出来的
  • 三水顺德网站建设软件定制开发
  • 镇江网站建设门户报价seod的中文意思
  • 做个手机网站有必要吗青岛网站优化
  • 公众号开发商咨询电话商丘优化公司
  • 网站如何加入百度联盟sem优化托管公司
  • 重庆网站服务器建设推荐nba最新排名公布
  • 中国商城网站建设深圳网站seo
  • 可以做自己的单机网站八大营销方式有哪几种
  • 权威的大连网站建设建立网站步骤
  • 西安做网站建设报个电脑培训班要多少钱
  • 郑州百度推广代运营公司排名优化是怎么做的
  • 自己做的产品在哪个网站上可从卖南京seo建站
  • 微信怎么建小网站郑州网站推广公司咨询
  • 大一网页设计代码英语seo是什么意思为什么要做seo
  • 网站百度推广怎么做的线上运营推广方案
  • 石家庄电子商务网站建设建立网站需要什么条件
  • 什么网站ghost做的好武汉seo工厂
  • 垂直网站做排名网络服务中心
  • dw做网站首页人民日报最新新闻
  • 上海做网站公司哪家好今日疫情最新情况
  • 网站网页设计的组成债务优化是什么意思
  • 住房和城乡建设部网站公布信息营销和销售的区别在哪里
  • 第三方做农产品价格数据的网站百度云资源搜索网站