我一直在探索在Spring Cloud Netflix中使用Hystrix支持来获取服务方法。
我看到有一种基于注释的方法,可以将@HystrixCommand与每种服务方法一起使用,并在属性中提供回退方法。我认为这将后备方法与代码联系起来,并且对于所有场景都不灵活。
我正在寻找一种方法来做同样的事情,而无需将代码与注释相结合。我仍然希望每个服务方法都有回退方法,但希望它们能够解耦,同时我希望能够灵活地根据配置启用/禁用每个方法的hystrix。
我是否可以在不使用注释和使用java / xml / properties文件配置的情况下使用Spring Cloud Netflix实现相同目的。
更新:
我找到了一种为每种服务方法启用/禁用回退方法的方法,如下所示。
我必须在hystrixCommand中添加“ commandKey ”属性并识别hystrix命令。
@HystrixCommand(
commandKey="version1",
fallbackMethod = "getFromFileSystem"
)
@GetMapping("/api/v1/addnos/{id1}/{id2}")
public String getMessage(@PathVariable String id1, @PathVariable String id2) {
String uri = "http://localhost:2080/api/addnos";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.exchange(uri, HttpMethod.POST, getHttpEntityRequest(id1, id2),
String.class);
return response.getBody().toString();
}
然后,我可以启用/禁用用hystrix命令包装的每个服务方法的回退方法,如下面在application.properties中调用。
hystrix.command.version1.fallback.enabled=false
hystrix.command.version2.fallback.enabled=true
hystrix.command.version3.fallback.enabled=false
不确定这是否是每个方法级别启用/禁用断路器的正确方法。通过此更改,可以在启用时执行回退,也可以在禁用时抛出异常。
我还找到了另一个属性,
hystrix.command.version1.circuitBreaker.enabled=false
但是,这只会通过应用的命令键禁用所有方法的断路器功能。它没有按预期工作。不确定它与回退方法启用/禁用的区别。
但是,我仍然不确定如何在启用时更改回退方法名称。
例如,如果我有两个回退方法(“ getfromCache ”和“ getFromFileSystem ”),要么在同一个类中,要么在另一个类中,并且要选择一个在另一方面。
我试过了,
hystrix.command.version2.fallbackMethod=getFromCache
但是,这没有任何影响。我无法使用可配置的值覆盖它。
它始终使用静态方法名称作为代码中 @HystrixCommand 注释的属性属性。