diff --git a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/LocalMessageDistributorConfiguration.java b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/LocalMessageDistributorConfiguration.java index 0d30ad835..344799f2a 100644 --- a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/LocalMessageDistributorConfiguration.java +++ b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/LocalMessageDistributorConfiguration.java @@ -23,7 +23,7 @@ public class LocalMessageDistributorConfiguration { */ @Bean @ConditionalOnMissingBean(MessageDistributor.class) - public LocalMessageDistributor messageDistributor() { + public LocalMessageDistributor sseMessageDistributor() { return new LocalMessageDistributor(); } diff --git a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/MessageDistributorTypeConstants.java b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/MessageDistributorTypeConstants.java index 6ae8cee0b..de846f493 100644 --- a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/MessageDistributorTypeConstants.java +++ b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/MessageDistributorTypeConstants.java @@ -1,7 +1,10 @@ package com.pig4cloud.pigx.common.sse.config; /** + * 消息分发器类型常量类 + * * @author lengleng + * @date 2025/06/06 */ public final class MessageDistributorTypeConstants { diff --git a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/RedisMessageDistributorConfiguration.java b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/RedisMessageDistributorConfiguration.java index 72010638d..557fd8927 100644 --- a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/RedisMessageDistributorConfiguration.java +++ b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/RedisMessageDistributorConfiguration.java @@ -27,32 +27,61 @@ import org.springframework.data.redis.listener.RedisMessageListenerContainer; @Configuration(proxyBeanMethods = false) public class RedisMessageDistributorConfiguration { + /** + * 创建Redis消息分发器Bean + * + * @param stringRedisTemplate Redis字符串模板 + * @return Redis消息分发器实例 + * @ConditionalOnMissingBean 当容器中不存在MessageDistributor类型的Bean时创建 + */ @Bean @ConditionalOnMissingBean(MessageDistributor.class) - public RedisMessageDistributor messageDistributor(StringRedisTemplate stringRedisTemplate) { + public RedisMessageDistributor sseMessageDistributor(StringRedisTemplate stringRedisTemplate) { return new RedisMessageDistributor(stringRedisTemplate); - } + } + /** + * 创建RedisSseEmitterMessageListener实例 + * + * @param stringRedisTemplate Redis字符串模板 + * @return RedisSseEmitterMessageListener实例 + * @see RedisSseEmitterMessageListener + */ @Bean @ConditionalOnBean(RedisMessageDistributor.class) @ConditionalOnMissingBean - public RedisSseEmitterMessageListener redisWebsocketMessageListener(StringRedisTemplate stringRedisTemplate) { + public RedisSseEmitterMessageListener sseRedisWebsocketMessageListener(StringRedisTemplate stringRedisTemplate) { return new RedisSseEmitterMessageListener(stringRedisTemplate); - } + } + /** + * 创建Redis消息监听容器 + * + * @param connectionFactory Redis连接工厂 + * @return Redis消息监听容器实例 + * @see RedisMessageListenerContainer + */ @Bean @ConditionalOnBean(RedisMessageDistributor.class) @ConditionalOnMissingBean - public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory connectionFactory) { + public RedisMessageListenerContainer sseRedisMessageListenerContainer(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); return container; - } + } + /** + * SSE Redis消息监听器注册配置类 + *

+ * 用于配置Redis消息监听器,实现SSE消息分发 + * + * @author lengleng + * @date 2025/06/06 + */ @Configuration(proxyBeanMethods = false) @ConditionalOnMissingBean(MessageDistributor.class) @RequiredArgsConstructor - static class RedisMessageListenerRegisterConfiguration { + static class SseRedisMessageListenerRegisterConfiguration { private final RedisMessageListenerContainer redisMessageListenerContainer; diff --git a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterAutoConfiguration.java b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterAutoConfiguration.java index c2fa9cdec..8a338473f 100644 --- a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterAutoConfiguration.java +++ b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterAutoConfiguration.java @@ -12,6 +12,12 @@ import org.springframework.context.annotation.Bean; @EnableConfigurationProperties(SseEmitterProperties.class) public class SseEmitterAutoConfiguration { + /** + * 创建并返回一个SseEmitterEndpoint实例 + * + * @return SseEmitterEndpoint实例 + * @ConditionalOnMissingBean 当容器中不存在该类型的bean时才会创建 + */ @Bean @ConditionalOnMissingBean public SseEmitterEndpoint sseEmitterEndpoint() { 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 e68e520b0..8ffd22e7c 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 @@ -12,8 +12,10 @@ import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.util.Objects; /** + * SSE端点控制器:提供服务器发送事件(SSE)功能 + * * @author lengleng - * @date 2023/12/11 + * @date 2025/06/06 */ @Slf4j @RestController @@ -21,6 +23,12 @@ import java.util.Objects; @RequestMapping("/sse") public class SseEmitterEndpoint { + /** + * 创建并返回一个SSE事件发射器 + * + * @return SSE事件发射器,用于服务器推送事件,若用户未认证则返回null + * @throws Exception 若发送初始消息失败时抛出异常 + */ @SneakyThrows @RequestMapping("/info") public SseEmitter info() { 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 15e248eeb..b6f976b8a 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 @@ -8,19 +8,34 @@ import java.io.IOException; import java.util.Collection; /** - * @author lengleng 2021/1/4 + * SSE消息发送工具类,提供广播和单播消息发送功能 + * + * @author lengleng * @version 1.0 + * @date 2025/06/06 */ @Slf4j public class SseEmitterMessageSender { + /** + * 广播消息给所有SSE订阅者 + * + * @param message 要广播的消息内容 + */ public static void broadcast(String message) { Collection sseEmitters = SseEmitterHolder.getSseEmitters(); for (SseEmitter sseEmitter : sseEmitters) { send(sseEmitter, message); - } - } + } + } + /** + * 发送消息到指定的SSE连接 + * + * @param sseEmitterKey SSE连接标识键 + * @param message 要发送的消息内容 + * @return 发送是否成功 + */ public static boolean send(Object sseEmitterKey, String message) { SseEmitter sseEmitter = SseEmitterHolder.getSseEmitter(sseEmitterKey); if (sseEmitter == null) { @@ -29,9 +44,16 @@ public class SseEmitterMessageSender { } else { return send(sseEmitter, message); - } - } + } + } + /** + * 发送消息到SSE连接 + * + * @param sseEmitter SSE连接对象 + * @param message 要发送的消息内容 + * @return 发送成功返回true,失败返回false + */ public static boolean send(SseEmitter sseEmitter, String message) { if (sseEmitter == null) { log.error("[send] sseEmitter 为 null"); diff --git a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterProperties.java b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterProperties.java index 238969416..4afa2dad7 100644 --- a/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterProperties.java +++ b/pigx-common/pigx-common-sse/src/main/java/com/pig4cloud/pigx/common/sse/config/SseEmitterProperties.java @@ -15,8 +15,7 @@ public class SseEmitterProperties { public static final String PREFIX = "pigx.sse"; /** - * 路径: 无参: /ws 有参: PathVariable: 单参: /ws/{test} 多参: /ws/{test1}/{test2} query: - * /ws?uid=1&name=test + * SSE信息路径 */ private String path = "/sse/info";