Ich benutze die Hystrix-Bibliothek für das Spring Boot-Projekt (spring-cloud-starter-hystrix
). Ich habe eine @Service
Klasse mit @HystrixCommand
kommentiert und es funktioniert wie erwartet.Hystrix und Spring @Async in Kombination
Aber wenn ich die Methode mit der Anmerkung @Async
in der gleichen Serviceklasse hinzugefügt, dann funktioniert die Hystrix nicht, und Fallback-Methode wird nie aufgerufen. Was könnte dieses Problem verursachen und wie kann es behoben werden?
Dies ist die Application
Klasse:
@EnableCircuitBreaker
@EnableHystrixDashboard
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Dies ist die Dienstklasse:
@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
Anmerkung in einer anderen Klasse mit @Configuration
kommentierte platziert ist, wo ich einige andere Themen Executor Optionen aus der Eigenschaftendatei.
zeigen Sie uns den entsprechenden Code und Konfiguration zusammen mit Fehler (* falls vorhanden *) –
Ich habe die Frage aktualisiert. – dplesa