不使用注释

时间:2017-02-10 08:43:25

标签: spring-boot hystrix spring-cloud-netflix circuit-breaker

我一直在探索在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 注释的属性属性。

0 个答案:

没有答案