从Spring Boot Controller中撤回Hystrix AsyncResult

时间:2018-02-04 09:19:16

标签: spring-boot hystrix

我有以下Spring Boot控制器:

@Controller
public class TestController {
    @Autowired
    private TestService service;


    @GetMapping(path="/hello")
    public ResponseEntity<String> handleGet() {
        return service.getResponse();
    }

    @GetMapping(path="/hello/hystrix")
    public Future<ResponseEntity<String>> handleGetAsync() {
        return service.getResponseAsync();
    }

    @GetMapping(path="/hello/cf")
    public Future<ResponseEntity<String>> handleGetCF() {
        return service.getResponseCF();
    }
}

和服务:

@Service
public class TestService {
    @HystrixCommand
    public ResponseEntity<String> getResponse() {
        ResponseEntity<String> response = ResponseEntity.status(HttpStatus.OK).body("Hello");
        return response;
    }

    @HystrixCommand
    public Future<ResponseEntity<String>> getResponseAsync() {
        return new AsyncResult<ResponseEntity<String>>() {
            @Override
            public ResponseEntity<String> invoke() {
                return getResponse();
            }
        };
    }

    public Future<ResponseEntity<String>> getResponseCF() {
        return CompletableFuture.supplyAsync(() -> getResponse());
    }
}

和申请:

@EnableHystrix
@SpringBootApplication
@EnableAsync
public class HystrixApplication {
    public static void main(String[] args) {
        SpringApplication.run(HystrixApplication.class, args);
    }
}

当我点击/ hello / cf端点时,我收到回复&#34; Hello&#34; 当我点击/ hello / hystrix端点时,我收到404错误。

我能以这种方式从控制器返回AsyncResult吗?如果是这样,我做错了什么?

感谢。

1 个答案:

答案 0 :(得分:0)

您的服务类需要返回CompletableFuture。 Here是一个包含一些示例的简短博客。

此外,除非您使用AspectJ,否则如果在同一个类中调用带有@HystrixCommand的方法,断路器将无法工作。