3

我一直在探索在 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注释的属性属性给出的静态方法名称。

4

0 回答 0