Springboot流

Springboot stream

我有一个 springboot API,它在后端处理很多进程。我需要将状态流式传输到前端。由于我是 springboot 的新手,任何人都可以帮助我如何实现这种情况。

注意 - 应用程序将来会被容器化,我不能为此使用任何云服务。

因为没什么可做的,我会尽力而为: 如果您使用的是 Log4j2,您可以简单地使用 the SocketAppender (external link)

如果不是: 我最近做了类似的事情,您需要以某种方式将您的日志转换为流。我建议使用找到的信息 here (non-external link)

OutputStream Stream;

@GetMapping("/stream-sse-mvc")
public SseEmitter streamSseMvc() {
    SseEmitter emitter = new SseEmitter();
    ExecutorService sseMvcExecutor = Executors.newSingleThreadExecutor();
    sseMvcExecutor.execute(() -> {
        try {
            Stream.map(sequence -> SseEmitter.event()
                   .id(""))
                   .event("EVENT_TYPE")
                   .data("String.valueOf(sequence)
                   .build());
                emitter.send(event);
                Thread.sleep(1000); //This does not need to be here
        } catch (Exception ex) {
            emitter.completeWithError(ex);
        }
    });
    return emitter;
}

可能有更好的方法来达到您的端点,但不知道您使用的是什么框架,这很难回答。本质上,我们正在做的是将所有日志输出捕获到流中,然后由 SSE 广播。