Обработка ошибок в 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 ?


Ответы (0 шт):