【问题标题】:Spring-Cloud Hystrix (fallback method wasn't found)Spring-Cloud Hystrix(未找到回退方法)
【发布时间】:2017-06-18 02:34:29
【问题描述】:

我正在尝试使用 hyst,但是在调用 save 方法(使用 resttemplate 发布帖子)时,会出现以下异常:

com.netflix.hystrix.contrib.javanica.exception.FallbackDefinitionException:未找到回退方法:breaker([class com.wnb.mastercard.domain.enroll.EnrollCommand])

有人可以帮我吗?

@Component
public class EnrollRepositoryRest {

    @Autowired
    private RestTemplate template;

    @Value("${beblue-card-enroll.url}")
    private String url;

    public Enroll getEnrollByCardId(String cardId) {

        Enroll[] enroll = template.getForObject(url + "cardEnroll/enroll/" + cardId, Enroll[].class);

        return enroll[0];
    }

    @HystrixCommand(fallbackMethod = "breaker")
    public void save(EnrollCommand command) {
        template.postForObject(url + "/cardEnroll/enroll", command, EnrollCommand.class);
    }

    public String breaker() {
        System.out.println("HYSTRIX EXECUTADO");
        return "Hystrix is Ok";
    }
}

【问题讨论】:

    标签: hystrix spring-cloud-netflix


    【解决方案1】:

    后备方法必须与原始方法具有相同的定义

    private void breaker(EnrollCommand command) {
        System.out.println("HYSTRIX EXECUTADO");
    }
    

    【讨论】:

    • 正确,回退方法必须具有相同的参数和相同的返回类型。
    【解决方案2】:

    @Ramon Rius

    即使返回类型也必须与“保存”方法的相同,在这种情况下它是无效的。

    如果没有,我会收到此错误。

    ERROR 10340 --- [nio-8060-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : 
    Servlet.service() for servlet [dispatcherServlet] in context with path [] 
    threw exception [Request processing failed; nested exception is 
    com.netflix.hystrix.contrib.javanica.exception.FallbackDefinitionException: 
    Incompatible return types. 
    Command method: public long com.brownfield.pss.book.component.BookingComponent.book(com.brownfield.pss.book.entity.BookingRecord,java.lang.String);
    Fallback method: public java.lang.String com.brownfield.pss.book.component.BookingComponent.fallByMethod(com.brownfield.pss.book.entity.BookingRecord,java.lang.String);
    Hint: Fallback method 'public java.lang.String com.brownfield.pss.book.component.BookingComponent.fallByMethod(com.brownfield.pss.book.entity.BookingRecord,java.lang.String)' must return: long or its subclass] with root cause
    

    东西是fallbackMethod的参数和返回类型和main方法应该是一样的。 fallbackMethod 可能有一个 Throwable 类型的额外参数

    【讨论】:

      【解决方案3】:

      我认为异常清楚地告诉了您问题所在。方法:

      public String breaker(EnrollCommand command) {
          System.out.println("HYSTRIX EXECUTADO");
          return "Hystrix is Ok";
      }
      

      不存在。 (注意签名中的参数)

      当您使用该注解定义回退方法时,回退方法必须与您定义 Hystrix 命令的方法的相同参数匹配。

      【讨论】:

      • 成功了,断路器方法和回退方法应该有相同的参数
      猜你喜欢
      • 2017-05-03
      • 2020-11-22
      • 2018-04-05
      • 2018-07-18
      • 2020-01-25
      • 2016-06-18
      • 2016-03-07
      • 2021-02-03
      • 2016-03-31
      相关资源
      最近更新 更多