Spring 中的服务器发送事件 - 为什么在那里使用执行器服务?

问题描述 投票:0回答:1

我想知道为什么在大多数教程中

SseEmitter
事件在执行器内部发送。

        SseEmitter emitter = new SseEmitter();
        ExecutorService sseMvcExecutor = Executors.newSingleThreadExecutor();

        sseMvcExecutor.execute(() -> { ...

如果他们在没有它的情况下运行会发生什么?

spring spring-boot executorservice server-sent-events
1个回答
0
投票

当您在执行器内发送事件时,事件处理发生在单独的线程中。

如果没有 Executor,事件仍然是异步发送的,因为当您调用

SseEmitter
时,
send()
本身不会阻塞主线程。但是,如果您的事件需要处理时间或来自外部源(例如,消息队列或数据库获取),则直接在主线程中处理所有内容将使该线程等待,特别是对于缓慢或 I/O 密集型任务。 例如-

SseEmitter emitter = new SseEmitter();
try {
    emitter.send("Hello, World!");
    // Some processing logic --> This will block your main thread !
    emitter.send("More data!");
} catch (Exception e) {
    emitter.completeWithError(e);
}
return emitter;

使用执行器为事件生成提供更大的灵活性和隔离性。

© www.soinside.com 2019 - 2024. All rights reserved.