为了账号安全,请及时绑定邮箱和手机立即绑定

即使没有发生异常,@Retryable 也会多次调用

即使没有发生异常,@Retryable 也会多次调用

慕侠2389804 2023-03-09 10:24:26
如果@Retryable使用RestTemplate.下面给出了函数,问题是我已经将 maxAttempts 设置为 4 以防万一发生任何异常它应该尝试 4 次。但即使没有任何异常,该函数也执行了 4 次,并且在数据库中创建了 4 个员工条目。createEmployee 函数调用另一个服务在数据库中创建员工@Retryable(value = { Exception.class }, maxAttempts = 4, backoff = @Backoff(delay = 1000))public Response createEmployee(EmployeeRequest employeeRequest) {  log.info(“creating employee”)  :  // calls another micro service using RestTemplate which creates employee into the DB  :}@EnableRetry在 AppConfig 中@Configuration@EnableRetrypublic class AppConfig {}谁能帮我解决这个问题
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

检查您的服务在根据该设置回退时间失败之前所花费的最长时间。检查在失败的情况下 resttemplate 可以抛出什么异常,仅将它们标记为您的重试。



查看完整回答
反对 回复 2023-03-09
?
jeck猫

TA贡献1909条经验 获得超7个赞

好的,检查 resttemplate 在失败的情况下可以抛出什么异常,仅将它们标记为您的重试。



查看完整回答
反对 回复 2023-03-09
?
翻阅古今

TA贡献1780条经验 获得超5个赞

您应该检查您的“调用另一个微服务”实施。


它可能是由该逻辑内部调用的另一个服务抛出异常。我建议创建一个自定义异常并将其用于您的重试定义。然后你可以检查另一种意外异常是否是强制重试 4 次的异常。


@Retryable(value = { YourCustomException.class }, maxAttempts = 4, backoff = @Backoff(delay = 1000))

public Response createEmployee(EmployeeRequest employeeRequest) 

{

  log.info(“creating employee”)

  :

  // calls another micro service using RestTemplate which creates employee into the DB

  :

}


查看完整回答
反对 回复 2023-03-09
  • 3 回答
  • 0 关注
  • 597 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信