我有一个使用Spring Cloud Feign客户端调用外部服务的REST服务
@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:Connection refused executing POST http://external-service/external/payments json.message:发送付款添加付款失败其他原因:{ERROR_RESPONSE_BODY=连接拒绝执行POST http://external-service/external/payments,EVENT=ADD_PAYMENT_FAILURE,TRANSACTION_ID=XXXXXXX} {} json。事件:ADD_PAYMENT_FAILURE json。stack_trace:feign.RetryableException:连接拒绝执行POST http://external-service/external/payments(在假装时)。FeignException。errorExecuting(FeignException.java:67)at fign.SynchronousMethodHandler。executeAndDecode(SynchronousMethodHandler.java:104)at feign.SynchronousMethodHandler。invoke(SynchronousMethodHandler.java:76)at feign.ReflectiveFeign$FeignInvocationHandler。invoke(ReflectiveFeign.java:103)
是否可以在Feign客户端上添加Spring重试。我想用什么来注解addPayment
操作
@Retryable(value = {feign.RetryableException.class }, maxAttempts = 3, backoff = @Backoff(delay = 2000, multiplier=2))
但这是不可能的,我还有其他选择吗?
7条答案
按热度按时间nxagd54h1#
您可以在
FeignClientConfig
中添加Retryer
使用基于
Retryer.Default
的Retryer
示例配置进行了更新。ar5n3qh52#
如果使用功能区,则可以设置属性,可以使用以下属性进行重试:
注意:“myapp”是您的服务ID。
查看此Github implementation以获取工作示例
roqulrg33#
只是新的一个constructor
Default
svgewumm4#
如果能帮到人的话就加上这个。我正在使用feign重置连接,因为一些未知的进程正在该端口上运行。尝试更改端口。Refer this to find the process running on a port
evrscar25#
我准备了一篇关于使用Spring Retry与Feign Client方法的博客文章。您可以考虑检查Post。所有步骤都在帖子中解释过了。
oxcyiej76#
这是我的配置。在 Spring Boot 2中测试正常。2.0.RELEASESpring Cloud霍克斯顿。M3
java代码是:
控制器为:
pom.xml additon add:
可选:
这是文件:
www.example. com
https://github.com/spring-projects/spring-retry
https://github.com/spring-cloud/spring-cloud-netflix/
kt06eoxx7#
我通过在ServiceClient之上创建一个 Package 器解决了这个问题