У нас возникла проблема с командой Hystrix в микросервисе Spring Boot/Cloud. У нас есть компонент Spring, содержащий метод, аннотированный @RabbitListener
. Когда приходит новое сообщение, метод делегирует вызов NotificationService::processNotification()
.Проблема с выпуском Spring Microservices с @HystrixCommand
NotificationService
является фасоль, аннотированная @Service
. Метод processNotification()
может запрашивать сторонние приложения. Мы хотим обернуть вызов сторонних приложений, используя @HystrixCommand
, чтобы обеспечить отказоустойчивость, но по некоторым причинам аннотированный метод Hystrix Command не работает.
Если мы вызываем контроллер, и контроллер делегирует вызов методу службы, который по очереди имеет команду Hystrix, все работает отлично. Единственная проблема с Hystrix Command возникает, когда микросервисы потребляют сообщения, и, похоже, Hystrix Command не запускает метод возврата.
Вот нерабочий код:
@Component
public class MessageProcessor {
@Autowired
private NotificationService notificationService;
@RabbitListener(queues = "abc.xyz-queue")
public void onNewNotification(String payload) {
this.notificationService.processNotification(payload);
}
}
@Service
public class NotificationService {
public void processNotification(String payload) {
...
this.notifyThirdPartyApp(notificationDTO);
...
}
@HystrixCommand(fallbackMethod = "notifyThirdPartyAppFallback")
public void notifyThirdPartyApp(NotificationDTO notificationDTO) {
//Do stuff here that could fail
}
public void notifyThirdPartyAppFallback(NotificationDTO notificationDTO) {
// Fallbacl impl goes here
}
}
@SpringBootApplication
@EnableCaching
@EnableCircuitBreaker
@EnableDiscoveryClient
@EnableRabbit
public class NotificationApplication {
public static void main(String[] args) {
SpringApplication.run(NotificationApplication.class, args);
}
}
сообщение некоторого кода вместо описания его. –