|
@@ -0,0 +1,52 @@
|
|
|
+package com.backendsys.modules.log.controller;
|
|
|
+
|
|
|
+import cn.hutool.core.convert.Convert;
|
|
|
+import com.backendsys.modules.common.config.security.annotations.Anonymous;
|
|
|
+import com.backendsys.modules.log.emitter.LogStreamEmitterManager;
|
|
|
+import com.backendsys.modules.log.utils.LogStreamUtil;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.web.bind.annotation.GetMapping;
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
+import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+
|
|
|
+@RestController
|
|
|
+public class LogStreamController {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private LogStreamUtil logStreamUtil;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * [SSE] 消息监听
|
|
|
+ */
|
|
|
+ @Anonymous
|
|
|
+ @GetMapping(value = "/api/log/stream/watch", produces = "text/event-stream")
|
|
|
+ public SseEmitter stream() {
|
|
|
+ String userId = Convert.toStr(1L);
|
|
|
+ SseEmitter emitter = new SseEmitter(Long.MAX_VALUE);
|
|
|
+ LogStreamEmitterManager manager = LogStreamEmitterManager.getInstance();
|
|
|
+ manager.addEmitter(userId, emitter);
|
|
|
+ try {
|
|
|
+ emitter.send(SseEmitter.event().data("success"));
|
|
|
+ } catch (IOException e) {
|
|
|
+ // 当所有事件发送完毕后,关闭连接
|
|
|
+ // emitter.complete();
|
|
|
+ // emitter.completeWithError(e);
|
|
|
+ manager.emitters.remove(emitter);
|
|
|
+ }
|
|
|
+ return emitter;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * [SSE] 测试发送
|
|
|
+ */
|
|
|
+ @Anonymous
|
|
|
+ @GetMapping("/api/log/stream/send")
|
|
|
+ public String send() {
|
|
|
+ String message = "{\"message\": \"Hello World\"}";
|
|
|
+ logStreamUtil.send(message);
|
|
|
+ return "success";
|
|
|
+ }
|
|
|
+
|
|
|
+}
|