Обработка ошибок в SseEmitter
Всем привет !
Пытаюсь сделать REST-контроллер который будет отправлять клиенту события, наткнулся на статью про sse , но заметил странность в обработке ошибок SseEmitter (completeWithError())
1: Запускаю код в такой реализации , в дебаге вижу :
@RestController
@RequestMapping(path = "/sse")
public class SseController {
@GetMapping(path = "/stream-sse-mvc", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter streamSseMvc() {
SseEmitter sseEmitter = new SseEmitter();
ExecutorService sseMvcExecutor = Executors.newSingleThreadExecutor();
sseMvcExecutor.execute(() -> {
try {
throw new Exception("test");
} catch (Exception ex) {
sseEmitter.completeWithError(ex);
}
});
return sseEmitter;
}
}
2: А если поменять реализацию и добавить :
@RestController
@RequestMapping(path = "/sse")
public class SseController {
@GetMapping(path = "/stream-sse-mvc", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter streamSseMvc() {
SseEmitter sseEmitter = new SseEmitter();
ExecutorService sseMvcExecutor = Executors.newSingleThreadExecutor();
sseMvcExecutor.execute(() -> {
try {
throw new Exception("test");
} catch (Exception ex) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
sseEmitter.completeWithError(ex);
}
});
return sseEmitter;
}
}
Вопрос почему усыпление потока приводит к тому , что появляется обработчик, а без усыпления он null ?

