当前位置: 首页 > 知识库问答 >
问题:

Hystrix回退方法最佳实践

魏刚豪
2023-03-14

好的,所以我找不到关于这个主题的任何有用的材料,我找到的一大块文章中有一个方法是用@HystrixCommand注释的,并且定义了一个回退方法。

我找到的另一个解决方案是使用@DefaultProperties(defaultFallback=“fallbackMethod”),但问题是这些方法需要具有兼容的返回类型。

不幸的是,在我的服务中,我有许多具有完全不同签名的方法,我还需要掌握可抛出的方法(在文档中提到,您不能为默认回退方法提供任何参数)。这些方法看起来像这样:

@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) {
    ...
  }
}

和ofc我有超过3种方法在服务中。。。

我真正想避免的是使用20个hystrix默认的回退方法。

有没有一种方法可以让我为所有方法定义一个标准的回退,不管它们有什么特征码,还是我必须为每个方法定义一个回退方法?

提前谢谢!!

共有2个答案

公孙宏畅
2023-03-14

让我分享一下我的项目中使用的代码片段。

要调用像http://www.baidu.com/xxx这样的api,您需要遵循以下步骤。

1.API定义(回退=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.回退定义

@Component
public class WebServiceApiFallback implements WebServiceApi {

  @Override
  public BaseResponse<YourResponse> xxx(YourRequest request) {
    // Your Fallback Code here, when api request failed.
  }

3.api主机配置,可能是应用程序。属性。。。

webServiceApi.ribbon.listOfServers=http://www.baidu.com

4.使用它

  @Autowired
  private WebServiceApi webServiceApi;

对于任何api,您都可以定义请求和响应,而Faign将执行请求、编码和解码。

[参考文献]https://github.com/spring-cloud/spring-cloud-netflix/issues/762

司空思聪
2023-03-14

您必须为每个方法实现一个回退。

但是,使用FallbackFactory可能会更容易,并允许每个方法调用一个可重用的方法。

如果每个方法的hystrix回退都是相同的,也许您并不真正想要它们。所有的尝试都可以解决同样的问题。

 类似资料:
  • 我正在尝试使用Netflix Hystrix Fallbackmethod&使用一个简单的spring程序。我遵循了一些教程中描述的所有基本步骤,但仍然会出错, 有没有人知道缺少了什么配置?下面是代码片段。 我的主要,

  • 场景:我需要从web应用程序的API收集分页数据,该API的调用限制为每分钟100次。我需要返回的API对象每页包含100个项目,总共105个页面,并且在不断增长(~10500个项目)。同步代码检索所有页面大约需要15分钟,因此不必担心达到调用限制。但是,我想加快数据检索速度,因此我使用和实现了异步调用。数据现在可以在15秒内下载-很好。 问题:我现在达到呼叫限制,因此在过去的5个左右的呼叫中收到

  • 本文向大家介绍ThreadPoolExecutor 创建方法最佳实践?相关面试题,主要包含被问及ThreadPoolExecutor 创建方法最佳实践?时的应答技巧和注意事项,需要的朋友参考一下 在《阿里巴巴 Java 开发手册》“并发处理”这一章节,明确指出线程资源必须通过线程池提供,不允许在应用中自行显示创建线程。 为什么呢? 使用线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源开

  • 我想知道人们在bigquery上构建和管理ETL作业时发现了哪些最佳实践/工具。 目前,我有很多sql模板(可怕的参数化的lob,日期等使用sed类型字符串替换成一个tmp.sql文件,然后运行),我使用命令行工具来运行它们的序列并将输出发送到表。它工作正常,但有点笨拙。我仍然不明白为什么我不能在bigQuery上运行存储过程类型参数化脚本。甚至是某种图形用户界面来构建和管理管道。 我喜欢bigq

  • 问题内容: 我在想是否存在一种更好/更巧妙的方法来否定Java。实际上,我正在执行以下操作: 但是我认为应该存在一种“美丽”的语法。 有谁知道它是否存在以及其语法如何? 编辑: 美丽,我可能会这样说: 问题答案: 不,没有更好的办法。你的是规范的。