mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 12:39:05 +08:00
feat(sse): 优化SSE模块配置与文档
- 重命名messageDistributor为sseMessageDistributor以明确功能定位 - 为SseEmitterEndpoint添加详细方法注释说明 - 优化RedisMessageDistributorConfiguration类结构与文档 - 更新SseEmitterMessageSender类文档与日期信息 - 为MessageDistributorTypeConstants添加类说明文档
This commit is contained in:
1 parent
718a587c19
commit
9601609eb2
7 files changed
+83
-16
No files matched your search
+1
-1
@@ -23,7 +23,7 @@ public class LocalMessageDistributorConfiguration {
|
||||
*/
|
||||
@Bean
|
||||
@ConditionalOnMissingBean(MessageDistributor.class)
|
||||
public LocalMessageDistributor messageDistributor() {
|
||||
public LocalMessageDistributor sseMessageDistributor() {
|
||||
return new LocalMessageDistributor();
|
||||
}
|
||||
|
||||
|
||||
+3
@@ -1,7 +1,10 @@
|
||||
package com.pig4cloud.pigx.common.sse.config;
|
||||
|
||||
/**
|
||||
* 消息分发器类型常量类
|
||||
*
|
||||
* @author lengleng
|
||||
* @date 2025/06/06
|
||||
*/
|
||||
public final class MessageDistributorTypeConstants {
|
||||
|
||||
|
||||
+36
-7
@@ -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消息监听器注册配置类
|
||||
* <p>
|
||||
* 用于配置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;
|
||||
|
||||
|
||||
+6
@@ -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() {
|
||||
|
||||
+9
-1
@@ -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() {
|
||||
|
||||
+27
-5
@@ -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<SseEmitter> 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");
|
||||
|
||||
+1
-2
@@ -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";
|
||||
|
||||
|
||||
Reference in new issue
Block a user