【发布时间】:2018-04-19 11:19:53
【问题描述】:
我有一个使用 Spring Cloud Feign 客户端调用外部服务的 RESTful 服务
@FeignClient(name = "external-service", configuration = FeignClientConfig.class)
public interface ServiceClient {
@RequestMapping(value = "/test/payments", method = RequestMethod.POST)
public void addPayment(@Valid @RequestBody AddPaymentRequest addPaymentRequest);
@RequestMapping(value = "/test/payments/{paymentId}", method = RequestMethod.PUT)
public ChangePaymentStatusResponse updatePaymentStatus(@PathVariable("paymentId") String paymentId,
@Valid @RequestBody PaymentStatusUpdateRequest paymentStatusUpdateRequest);
}
我在过去 3 个月的日志文件中注意到以下失败 3-4 次:
json.ERROR_RESPONSE_BODY:连接拒绝执行POST http://external-service/external/paymentsjson.message:发送付款 添加付款失败其他原因:{ERROR_RESPONSE_BODY=Connection 拒绝执行 POST http://external-service/external/payments, EVENT=ADD_PAYMENT_FAILURE,TRANSACTION_ID=XXXXXXX} {} json.EVENT:ADD_PAYMENT_FAILURE json.stack_trace:feign.RetryableException:连接被拒绝 执行 POST http://external-service/external/payments at feign.FeignException.errorExecuting(FeignException.java:67) 在 feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:104) 在 feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:76) 在 feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:103)
是否可以在 Feign 客户端上添加 Spring Retry。 我想用
注释addPayment 操作
@Retryable(value = {feign.RetryableException.class }, maxAttempts = 3, backoff = @Backoff(delay = 2000, multiplier=2))
但这是不可能的,我还有什么其他选择?
【问题讨论】:
-
根据文档有可能...cloud.spring.io/spring-cloud-netflix/multi/… 我无法让它工作。
标签: spring spring-boot spring-cloud spring-cloud-feign spring-retry