diff --git a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterEndpoint.java b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterEndpoint.java index 397a81f1f..e68e520b0 100644 --- a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterEndpoint.java +++ b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterEndpoint.java @@ -30,17 +30,25 @@ public class SseEmitterEndpoint { log.debug("MSG: SseConnectError"); return null; } + + Long userId = SecurityUtils.getUser().getId(); log.info("MSG: SseConnect | EmitterHash: {} | ID: {}", sseEmitter.hashCode(), SecurityUtils.getUser().getId()); sseEmitter.onCompletion(() -> { - log.info("MSG: SseConnectCompletion | EmitterHash: {} |ID: {}", sseEmitter.hashCode(), SecurityUtils.getUser().getId()); + log.info("MSG: SseConnectCompletion | EmitterHash: {} |ID: {}", sseEmitter.hashCode(), + SecurityUtils.getUser().getId()); + SseEmitterHolder.removeSseEmitter(sseEmitter); }); sseEmitter.onTimeout(() -> { - log.error("MSG: SseConnectTimeout | EmitterHash: {} |ID: {} ", sseEmitter.hashCode(), SecurityUtils.getUser().getId()); + log.error("MSG: SseConnectTimeout | EmitterHash: {} |ID: {} ", sseEmitter.hashCode(), + SecurityUtils.getUser().getId()); + SseEmitterHolder.removeSseEmitter(sseEmitter); }); sseEmitter.onError(t -> { - log.error("MSG: SseConnectError | EmitterHash: {} |ID: {}", sseEmitter.hashCode(), SecurityUtils.getUser().getId()); + log.error("MSG: SseConnectError | EmitterHash: {} |ID: {}", sseEmitter.hashCode(), + SecurityUtils.getUser().getId()); + SseEmitterHolder.removeSseEmitter(sseEmitter); }); - SseEmitterHolder.addSseEmitter(SecurityUtils.getUser().getId(), sseEmitter); + SseEmitterHolder.addSseEmitter(userId, sseEmitter); sseEmitter.send("pong"); return sseEmitter; } diff --git a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterMessageSender.java b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterMessageSender.java index cee119b5d..15e248eeb 100644 --- a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterMessageSender.java +++ b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterMessageSender.java @@ -1,6 +1,5 @@ package com.pig4cloud.pigx.common.sse.config; -import cn.hutool.core.util.ReflectUtil; import com.pig4cloud.pigx.common.sse.holder.SseEmitterHolder; import lombok.extern.slf4j.Slf4j; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; diff --git a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/holder/SseEmitterHolder.java b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/holder/SseEmitterHolder.java index 67f9c32fc..77faed9d2 100644 --- a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/holder/SseEmitterHolder.java +++ b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/holder/SseEmitterHolder.java @@ -31,10 +31,10 @@ public final class SseEmitterHolder { /** * 删除一个 sseEmitter - * @param sseEmitterKey sseEmitter唯一标识 + * @param sseEmitter SseEmitter */ - public static void removeSseEmitter(Object sseEmitterKey) { - USER_SSE_EMITTER_MAP.remove(sseEmitterKey.toString()); + public static void removeSseEmitter(SseEmitter sseEmitter) { + USER_SSE_EMITTER_MAP.values().remove(sseEmitter); } /**