我使用Hystrix庫進行Spring Boot項目(spring-cloud-starter-hystrix
)。我有一個@Service
班註釋@HystrixCommand
,它按預期工作。Hystrix和Spring @Async組合
但是,當我在相同的服務類中添加註釋爲@Async
的方法時,Hystrix不起作用,並且從不會調用回退方法。什麼可能導致這個問題,以及如何解決它?
這是Application
類:
@EnableCircuitBreaker
@EnableHystrixDashboard
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
這是服務類:
@Service
public class TemplateService {
@HystrixCommand(fallbackMethod = "getGreetingFallback", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1500") })
public String getGreeting() {
URI uri = URI.create("http://localhost:8090/greeting");
ResponseEntity<String> response = restTemplate.exchange(uri, HttpMethod.GET, null, String.class);
if (response.getStatusCode().equals(HttpStatus.OK)) {
return response.getBody();
} else {
return null;
}
}
public String getGreetingFallback(Throwable e) {
return null;
}
}
@Async
public void async(String message) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
logger.info(MessageFormat.format("Received async message {0}", message));
}
@EnableAsync
註釋被放置在與@Configuration
,我在那裏設置一些其他線程執行器選項註釋不同的類從屬性文件。
告訴我們相關的代碼和配置以及錯誤(*如果有的話) –
我已經更新了這個問題。 – dplesa