我一直在探索在 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
但是,这只会禁用所有具有应用命令键的方法的断路器功能。它没有按预期工作。不确定它与回退方法启用/禁用有何不同。
但是,我仍然不确定启用后如何更改回退方法名称。
例如,如果我在同一个类或不同的类中有 2 个后备方法(“ getfromCache ”和“ getFromFileSystem ”),并且想要选择一个而不是另一个。
我试过了,
hystrix.command.version2.fallbackMethod=getFromCache
但是,这没有任何效果。我无法用可配置的值覆盖它。
它始终使用作为代码中@HystrixCommand注释的属性属性给出的静态方法名称。