我们可以在@HystrixCommand 上使用@Async
Can we use @Async on a @HystrixCommand
我不知道如何测试这个,需要一个快速的答案是否可能,我怎么可能测试这个。
所以我有一个来自服务的 api 网关调用,我想知道的是,如果可以使用 spring boot
@Component
class GatewayService {
@Autowired
private MicroserviceGateway microServiceGateway;
@Async
@HystrixCommand(threadPool = "microservice", groupKey = "microService", fallback = "getResponse2")
private Future<ResponseDTO> getResponse(RequestDTO request) {
try {
ResponseDTO response = new APIRequest(endpoint, api).body(request).post();
return new AsyncResult(response);
} catch (Exception e) {
throw new GatewayServiceException(e);
}
}
public Future<ResponseDTO> getResponse2(RequestDTO request) {
return Futures.immediateFuture(RequestDTO.empty());
}
}
回退会起作用吗?都会是异步的吗?
EDIT :试过这个,hystrix 被忽略了,因为未来会立即返回。任何解决方法?解决方案?
这应该有效。您的常规 DTO 方法将异步执行,而在回退期间它将是同步的。
我相信通过线程池使用 Hystrix
命令 asynchronously
的方法是:
如果使用 @HystrixCommand
注释:
...
@HystrixCommand
public Future<Product> findProduct(String id) {
return new AsyncResult<Product>() {
@Override
public Product invoke() {
...
return productService.find ...
}
};
}
...
如果使用 Hystrix
命令 class,例如 ProductCommandFind.java
...
ProductCommandFind command = new ProductCommandFind(...);
Future<Product> result = command.queue();
...
Hystrix
命令使用它自己的和可配置的线程池,可能为每个命令组配置一个线程池,假设一个名为 PRODUCT_GROUP 的命令组的线程池被命令使用:productCommandFind,productCommandCreate,。 ...
基本上我认为没有必要同时用@Async
和@HystrixCommand
注释一个方法。
我不知道如何测试这个,需要一个快速的答案是否可能,我怎么可能测试这个。
所以我有一个来自服务的 api 网关调用,我想知道的是,如果可以使用 spring boot
@Component
class GatewayService {
@Autowired
private MicroserviceGateway microServiceGateway;
@Async
@HystrixCommand(threadPool = "microservice", groupKey = "microService", fallback = "getResponse2")
private Future<ResponseDTO> getResponse(RequestDTO request) {
try {
ResponseDTO response = new APIRequest(endpoint, api).body(request).post();
return new AsyncResult(response);
} catch (Exception e) {
throw new GatewayServiceException(e);
}
}
public Future<ResponseDTO> getResponse2(RequestDTO request) {
return Futures.immediateFuture(RequestDTO.empty());
}
}
回退会起作用吗?都会是异步的吗?
EDIT :试过这个,hystrix 被忽略了,因为未来会立即返回。任何解决方法?解决方案?
这应该有效。您的常规 DTO 方法将异步执行,而在回退期间它将是同步的。
我相信通过线程池使用 Hystrix
命令 asynchronously
的方法是:
如果使用 @HystrixCommand
注释:
...
@HystrixCommand
public Future<Product> findProduct(String id) {
return new AsyncResult<Product>() {
@Override
public Product invoke() {
...
return productService.find ...
}
};
}
...
如果使用 Hystrix
命令 class,例如 ProductCommandFind.java
...
ProductCommandFind command = new ProductCommandFind(...);
Future<Product> result = command.queue();
...
Hystrix
命令使用它自己的和可配置的线程池,可能为每个命令组配置一个线程池,假设一个名为 PRODUCT_GROUP 的命令组的线程池被命令使用:productCommandFind,productCommandCreate,。 ...
基本上我认为没有必要同时用@Async
和@HystrixCommand
注释一个方法。