Встречается на собеседованиях • сегодня
Как через HTTP обработать запрос, требующий долгого выполнения
Для обработки долгих HTTP-запросов лучше использовать асинхронный подход:
1. **AsyncController** (Spring):
```java
@RestController
public class AsyncController {
@GetMapping("/long-task")
public Callable longTask() {
return () -> {
Thread.sleep(5000); // Долгая операция
return "Result";
};
}
}
```
2. **Future/CompletableFuture**:
```java
@GetMapping("/async-future")
public CompletableFuture asyncFuture() {
return CompletableFuture.supplyAsync(() -> {
// Долгая операция
return "Result";
});
}
```
3. **WebClient/DeferredResult** для более сложных сценариев
Ключевые моменты:
- Не блокируйте основной поток
- Возвращайте 202 Accepted с ID задачи
- Предусмотрите механизм проверки статуса (/status/{id})
- Ограничьте время выполнения таймаутом
- Логируйте прогресс выполнения
Для очень долгих операций лучше использовать очереди (RabbitMQ/Kafka) с отдельными воркерами.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы