好吧,所以我找不到关于该主题的任何有用的材料,我发现很多文章都提供了一种方法,该方法使用@HystrixCommand进行了注释,并定义了一个后备方法。
我发现的另一个解决方案是使用@DefaultProperties(defaultFallback =“ fallbackMethod”),但是问题是方法需要具有兼容的返回类型。
不幸的是,在我的服务中,我有许多签名完全不同的方法,而且我还需要掌握throwable(在docs中提到,默认回退方法没有任何参数)。方法看起来像这样:
@Service
@RequiredArgsConstructor
public class MyService {
private final FeignClient feignClient;
@Override
public String methodA(final CustomObjectA o, final String entity) {
...
}
@Override
public String methodB(final String collection, final Map<String, Object> requestBody) {
...
}
@Override
public String methodC(final String collection, final String id, final Map<String, Object> requestBody) {
...
}
}
而且我在服务中定义了3种以上的方法...
我真正要避免的事情是制作20种hystrix默认后备方法。
是否有一种方法可以定义所有方法的标准后备方法,无论它们具有什么签名,还是我坚持为每个方法定义一个后备方法?
提前谢谢!
答案 0 :(得分:1)
您将必须为每种方法实现一个后备。
但是使用FallbackFactory
可能会更容易,并且允许每个方法调用一个可重用的方法。
如果每种方法的hystrix后备相同,也许您并不是真的想要它们。所有尝试捕获都可以解决相同的问题。
答案 1 :(得分:1)
让我分享我的项目中使用的代码段。
要调用http://www.baidu.com/xxx之类的api,您需要执行以下步骤。
1.Api定义( fallback = WebServiceApiFallback.class
)
@Component
@FeignClient(value = "webServiceApi", configuration = FeignConfiguration.class, fallback = WebServiceApiFallback.class)
public interface WebServiceApi {
@Headers(value = {"Content-Type: application/json", "Accept-Encoding: gzip,deflate"})
@GetMapping(value = "/xxx")
BaseResponse<YourResponse> xxx(YourRequest request);
2.Fallback定义
@Component
public class WebServiceApiFallback implements WebServiceApi {
@Override
public BaseResponse<YourResponse> xxx(YourRequest request) {
// Your Fallback Code here, when api request failed.
}
3.api主机配置,也许是application.properties ...
webServiceApi.ribbon.listOfServers=http://www.baidu.com
4。使用它
@Autowired
private WebServiceApi webServiceApi;
对于任何api,您都可以定义自己的请求和响应,然后feign会进行请求,编码和解码。
[Ref] https://github.com/spring-cloud/spring-cloud-netflix/issues/762