我正在尝试将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
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