Я пытаюсь создать небольшой скрипт с использованием среды Spring, который создает «заметку» для «пользователя» в микросервисе «Заметки».
Затем существует микросервис «Пользователи», который является независимым, и для создания заметки для пользователя я должен сначала проверить, существует ли этот пользователь в микросервисе «Пользователи».
ОднакоЕсли микросервис «Пользователь» не работает, я хочу сохранить эту заметку на карте (вместе с именем пользователя), а затем каждые 10 секунд повторять ее создание.
Я ожидал, что Hystrix выполнит в точностиТаким же образом каждый раз, когда метод с тегом @HystrixCommand выполняется, но в первый раз он выполняется, а во второй - нет.
Hystrix не обрабатывает ошибку, если микросервис «Users» не работает во второй раз, когда вызывается метод «createUserNote».
@HystrixCommand(fallbackMethod = "createUserNoteReliable")
public NoteLab createUserNote(String username, NoteLab noteLab) {
System.out.println("Trying to create user note (HystrixCommand)");
URI uri = URI.create("http://localhost:8080/users/userExists/" + username);
System.out.println("uri created");
if (restTemplate.getForObject(uri, boolean.class)) {
System.out.println("CREATING NOTE " +noteLab.getId());
try {
noteLab.setDateCreation(LocalDateTime.now());
noteLab.setDateEdit(LocalDateTime.now());
return addUserNote(username, noteLab);
} catch (Exception e){
return null;
}
} else {
System.out.println("User " +username + " does not exist");
return null;
}
}
HashMap<NoteLab, String> mapNoteUser = new HashMap<>();
public NoteLab createUserNoteReliable(String username, NoteLab noteLab) {
System.out.println("User server is down. Saving the note " +noteLab.getId());
try {
mapNoteUser.put(noteLab, username);
} catch (Exception e){}
return null;
}
@Scheduled(fixedDelay = 10000) //In miliseconds. (10s)
public void retryCreateUserNote(){
System.out.println("Executing automatic retry method");
for( NoteLab note: mapNoteUser.keySet() ) {
System.out.println("Retying to create note " + note.toString() + " from " + mapNoteUser.get(note));
NoteLab noteToRetry = note;
String userToRetry = mapNoteUser.get(note);
mapNoteUser.remove(note);
createUserNote(userToRetry, noteToRetry);
}
}
Я оставляю здесь свой код и любую подсказку оБуду очень признателен за то, что происходит.
Заранее большое спасибо!