spring Java重新尝试执行服务调用
我正在用Java开发一个应用程序Spring,它只需点击一个按钮就包含一个流。 该流包含两个服务调用。根据这些服务呼叫,决定是继续还是结束流程
此流程中涉及的服务是第三方API。如果出现任何网络问题或这些API关闭,此流程将不会继续
这里的要求是,如果上述问题中有任何一个没有得到响应,则应尝试服务调用3次,如果之前的服务调用已经响应,则不重复
我想知道spring或任何其他框架中是否有任何功能可用于实现上述流程
提前谢谢
你可以在下面搜索框中键入要查询的问题!
我正在用Java开发一个应用程序Spring,它只需点击一个按钮就包含一个流。 该流包含两个服务调用。根据这些服务呼叫,决定是继续还是结束流程
此流程中涉及的服务是第三方API。如果出现任何网络问题或这些API关闭,此流程将不会继续
这里的要求是,如果上述问题中有任何一个没有得到响应,则应尝试服务调用3次,如果之前的服务调用已经响应,则不重复
我想知道spring或任何其他框架中是否有任何功能可用于实现上述流程
提前谢谢
# 1 楼答案
只需查看Spring Retry库,它是Spring项目保护伞的一部分(这个库以前是Spring Batch的一部分,你可以在那里寻找它,这取决于你的Spring版本有多过时)
您可以使用
@Retryable
注释及其maxAttempts
来实现您的需求假设您已经准备好所需的依赖项(spring-retry、aspectjrt、aspectjweaver),并使用基于注释的配置的现代Spring版本,您需要在概念上实现3个步骤:
1。启用重试支持
将
@EnableRetry
添加到Spring应用程序的@Configuration
标记类中,如here所述2。创建服务呼叫方
在这里,我们希望在网络问题的情况下抛出IOException(例如简化)。更进一步,您还可以通过指定backoff timeout来研究重试之间的暂停
3。从服务调用类外部执行线束调用
这对于在声明类之外执行对
@Retryable
标记方法的实际调用链非常重要,以使基础aspectj代理正常工作: