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

Spring Hystrix未在内部方法上触发

卫开济
2023-03-14

我正在尝试将Hystrix断路器包含在一个spring boot应用程序中。我的应用程序是一个标准的spring boot 1.4.1,带有spring-cloud-hystrix v1.2.0应用程序,其中有一个控制器类,它用一个“聚合”方法调用一个服务类。此方法使用内部私有方法在内部调用两个服务。

这是我的服务类:

@Service
public class AggregationService {

    @Autowired
    Service1 service1Client;

    @Autowired
    Service2 service2Client;

    private static final String QUERY = "query";
    private static final Logger log = LogManager.getLogger();
    private final ObjectMapper objectMapper = new ObjectMapper();

    //@HystrixCommand(
    //    fallbackMethod = "emptyResult",
    //    groupKey = "aggregation-service",
    //    commandKey = "aggregate")
    public AggregationResponse aggregate(final AggregationParams params)
            throws ApiException, IOException {

        final String query = queryExplain(params);
        final WrapperQueryBuilder wrappedQuery = QueryBuilders.wrapperQuery(query);
        final SearchResponse aggregationResult = searchAggregation(params, wrappedQuery);

        return toDtoResponse(aggregationResult.getAggregations().get(params.getAggregationField().name().toLowerCase()));
    }

    @HystrixCommand(
        fallbackMethod = "emptyAggregationResult",
        groupKey = "aggregation-service",
        commandKey = "searchAggregation")
    private SearchResponse searchAggregation(final AggregationParams params, final WrapperQueryBuilder query) {

        return ... do something with service 2 ....
    }

    //    @HystrixCommand(
    //        fallbackMethod = "rethrowTimeoutException",
    //        groupKey = "aggregation-service",
    //        commandKey = "query-for-aggregation",
    //        ignoreExceptions = TimeoutException.class)
    private String queryExplain(final AggregationParams params) throws ApiException, IOException {
        final String queryAsString = ... do something with service 1 ....
    }

    private String rethrowTimeoutException(final AggregationParams params, final Throwable e) {
        log.error("On Hystrix fallback because of ", e);
        return null;
    }

    private SearchResponse emptyAggregationResult(final AggregationParams params, final WrapperQueryBuilder query, final Throwable e) {
        log.error("On Hystrix fallback because of ", e);
        return null;
    }

}

我的控制器方法是:

 @GetMapping("{field}")
    @ResponseStatus(HttpStatus.OK)
    public AggregationResponse aggregate(... some params ...) throws ApiException, IOException {

... omissis ....

        return aggregationService.aggregate(params);

我的配置类有以下注释:

@Configuration
@EnableHystrix
hystrix.command.searchAggregation.execution.isolation.thread.timeoutInMilliseconds=1
hystrix.command.searchAggregation.circuitBreaker.errorThresholdPercentage=10
hystrix.command.queryExplain.execution.isolation.thread.timeoutInMilliseconds=1
hystrix.command.queryExplain.circuitBreaker.errorThresholdPercentage=10
hystrix.command.default.execution.timeout.enabled=true

共有1个答案

蔺劲
2023-03-14

Javanica使用HystrixCommandAspect方面来检测用HystrixCommand注释注释的方法,并且定义的切入点似乎只影响公共方法。

更新:有一个与此特定问题相关的bug报告。

 类似资料:
  • 我使用的是spring boot、kotlin和junit5。我有一个测试类,当我在未触发所有函数之前使用RunWith(SpringRunner::class)@时,但当我删除该类时,它会给lateinit字段带来错误。

  • 下面是我的控制器方法(类是com.x.y.z.MyController): 以下是方面类:

  • 问题内容: 请看下面的代码: 在上面的代码中,在方法ModifyList()中声明的匿名内部类的实例能够访问传递给该方法的参数。AFAIK Java为内部类创建一个单独的字节码文件。 谁能解释一下Java在字节码级别上如何处理这些局部变量绑定?我的意思是,Java如何精确跟踪对作为参数传递给该方法的对象的引用? 任何帮助将不胜感激! [抱歉我的英语不好! 如果您理解我的问题,请编辑这篇文章,并删除

  • 问题内容: 我必须在java swing actionperformed方法内部调用一个方法。但是,当我单击按钮时,什么也没有发生。如何解决这个问题呢? 问题答案: 您需要向按钮添加动作侦听器,以响应单击事件:

  • 我想获取GET参数的值并触发一个事件。如何在Created方法中触发事件? 我尝试了这种方式,但没有找到点击方法:

  • 问题内容: 仅使用和值,并集中在(最好没有的)内部时,是否可以通过按Enter键来触发方法?因为,只希望用户按下“ Enter”键才能更新name字符串状态。 这是代码: 问题答案: 您可以做的是使用React的关键事件,如下所示: 现在,要检测回车键,请将功能更改为: 因此,这是向输入元素添加事件侦听器。请参阅React的键盘事件。enterPressed然后,该函数在发生事件时被触发,现在en