diff --git a/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/bus/ChatRedisPublisher.java b/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/bus/ChatRedisPublisher.java index 97c6ab1..28164b1 100644 --- a/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/bus/ChatRedisPublisher.java +++ b/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/bus/ChatRedisPublisher.java @@ -8,7 +8,7 @@ import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Component; -@Component +//@Component // Redis 방식 비활성화 @RequiredArgsConstructor public class ChatRedisPublisher { diff --git a/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/bus/ChatRedisSubscriber.java b/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/bus/ChatRedisSubscriber.java index 26b9c86..5de21cd 100644 --- a/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/bus/ChatRedisSubscriber.java +++ b/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/bus/ChatRedisSubscriber.java @@ -9,7 +9,7 @@ import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Component; -@Component +//@Component // Redis 방식 비활성화 @RequiredArgsConstructor public class ChatRedisSubscriber implements MessageListener { diff --git a/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/bus/RedisPubSubConfig.java b/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/bus/RedisPubSubConfig.java index 955d43b..442bce9 100644 --- a/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/bus/RedisPubSubConfig.java +++ b/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/bus/RedisPubSubConfig.java @@ -7,7 +7,7 @@ import org.springframework.data.redis.listener.PatternTopic; import org.springframework.data.redis.listener.RedisMessageListenerContainer; -@Configuration +//@Configuration // Redis 방식 비활성화 @RequiredArgsConstructor public class RedisPubSubConfig { diff --git a/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/controller/ChatMessagingController.java b/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/controller/ChatMessagingController.java index c8cd91c..800c2eb 100644 --- a/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/controller/ChatMessagingController.java +++ b/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/controller/ChatMessagingController.java @@ -4,7 +4,7 @@ import java.security.Principal; import java.util.Map; import java.util.UUID; -import likelion.mlb.backendProject.domain.chat.bus.ChatRedisPublisher; +//import likelion.mlb.backendProject.domain.chat.bus.ChatRedisPublisher; import likelion.mlb.backendProject.domain.chat.dto.ChatSendRequest; import likelion.mlb.backendProject.domain.chat.repository.ChatMembershipRepository; import lombok.RequiredArgsConstructor; @@ -23,7 +23,7 @@ public class ChatMessagingController { private final ChatMessageService chatMessageService; private final SimpMessagingTemplate messagingTemplate; private final ChatMembershipRepository membershipRepository; - private final ChatRedisPublisher chatRedisPublisher; + //private final ChatRedisPublisher chatRedisPublisher; @MessageMapping("/chat/{roomId}/send") @@ -55,7 +55,11 @@ public void send(@DestinationVariable UUID roomId, "createdAt", saved.getCreatedAt().toString() ); - - chatRedisPublisher.publishToRoom(roomId, new java.util.HashMap<>(payload)); + // Redis 대신 직접 WebSocket으로 전송 (즉시 전달) + String topic = "/topic/chat/" + roomId; + messagingTemplate.convertAndSend(topic, payload); + + // Redis 방식 (주석처리 - 지연 발생) + //chatRedisPublisher.publishToRoom(roomId, new java.util.HashMap<>(payload)); } } diff --git a/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/controller/ChatNotificationController.java b/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/controller/ChatNotificationController.java index d8cc8c4..e8e1481 100644 --- a/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/controller/ChatNotificationController.java +++ b/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/controller/ChatNotificationController.java @@ -5,7 +5,7 @@ * */ import java.util.Map; import java.util.UUID; -import likelion.mlb.backendProject.domain.chat.bus.ChatRedisPublisher; +//import likelion.mlb.backendProject.domain.chat.bus.ChatRedisPublisher; import likelion.mlb.backendProject.domain.chat.service.ChatMessageService; import lombok.Data; import lombok.RequiredArgsConstructor; @@ -21,7 +21,7 @@ public class ChatNotificationController { private final SimpMessagingTemplate messagingTemplate; - private final ChatRedisPublisher chatRedisPublisher; + //private final ChatRedisPublisher chatRedisPublisher; // Redis 방식 비활성화 private final ChatNotificationService notificationService; private final ChatMessageService chatMessageService; // 디버그용 @@ -41,7 +41,7 @@ public ResponseEntity> roomAlert( var saved = chatMessageService.saveSystemAlert(roomId, text); // DB 저장 - // ✅ STOMP 브로드캐스트 + Redis fan-out + // ✅ 직접 WebSocket으로 브로드캐스트 (즉시 전송) Map payload = Map.of( "id", saved.getId().toString(), "chatRoomId", roomId.toString(), @@ -50,7 +50,9 @@ public ResponseEntity> roomAlert( "createdAt", saved.getCreatedAt().toString() ); messagingTemplate.convertAndSend("/topic/chat/" + roomId, payload); - chatRedisPublisher.publishToRoom(roomId, new java.util.HashMap<>(payload)); + + // Redis 방식 (주석처리 - 지연 발생) + //chatRedisPublisher.publishToRoom(roomId, new java.util.HashMap<>(payload)); return ResponseEntity.ok(Map.of("ok", true, "id", saved.getId().toString())); } diff --git a/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/service/Impl/ChatNotificationServiceImpl.java b/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/service/Impl/ChatNotificationServiceImpl.java index 3a3832a..2ca18b2 100644 --- a/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/service/Impl/ChatNotificationServiceImpl.java +++ b/backendProject/src/main/java/likelion/mlb/backendProject/domain/chat/service/Impl/ChatNotificationServiceImpl.java @@ -6,7 +6,7 @@ import java.util.Map; import java.util.UUID; -import likelion.mlb.backendProject.domain.chat.bus.ChatRedisPublisher; +//import likelion.mlb.backendProject.domain.chat.bus.ChatRedisPublisher; import likelion.mlb.backendProject.domain.chat.entity.ChatMessage; import likelion.mlb.backendProject.domain.chat.repository.AlertRoutingRepository; import likelion.mlb.backendProject.domain.chat.repository.ChatMessageRepository; @@ -28,7 +28,7 @@ public class ChatNotificationServiceImpl implements ChatNotificationService { private final ChatMessageRepository chatMessageRepository; private final ChatMessageService chatMessageService; private final SimpMessagingTemplate messagingTemplate; - private final ChatRedisPublisher chatRedisPublisher; + //private final ChatRedisPublisher chatRedisPublisher; // Redis 방식 비활성화 /** * LiveDataService에서 바로 호출 (현재 트랜잭션 커밋 후에 실행되도록 지연) @@ -77,6 +77,7 @@ protected void doDispatch(UUID playerId, // ✅ 서비스 경유 저장: AFTER_COMMIT 색인(ES)까지 자동 수행 var saved = chatMessageService.saveSystemAlert(roomId, msgText); + // ✅ 직접 WebSocket으로 전송 (즉시 전달) var payload = Map.of( "id", saved.getId().toString(), "chatRoomId", roomId.toString(), @@ -85,7 +86,9 @@ protected void doDispatch(UUID playerId, "createdAt", saved.getCreatedAt().toString() ); messagingTemplate.convertAndSend("/topic/chat/" + roomId, payload); - chatRedisPublisher.publishToRoom(roomId, new java.util.HashMap<>(payload)); + + // Redis 방식 (주석처리 - 지연 발생) + //chatRedisPublisher.publishToRoom(roomId, new java.util.HashMap<>(payload)); } }