fix(user-creator-chat): Redis pub/sub 고정 채널을 사용한다

This commit is contained in:
2026-06-19 06:49:36 +09:00
parent 74c112f128
commit 63e09fa848
2 changed files with 10 additions and 14 deletions

View File

@@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
import org.springframework.data.redis.connection.Message import org.springframework.data.redis.connection.Message
import org.springframework.data.redis.connection.MessageListener import org.springframework.data.redis.connection.MessageListener
import org.springframework.data.redis.core.StringRedisTemplate import org.springframework.data.redis.core.StringRedisTemplate
import org.springframework.data.redis.listener.PatternTopic import org.springframework.data.redis.listener.ChannelTopic
import org.springframework.data.redis.listener.RedisMessageListenerContainer import org.springframework.data.redis.listener.RedisMessageListenerContainer
import org.springframework.stereotype.Component import org.springframework.stereotype.Component
import org.springframework.web.socket.TextMessage import org.springframework.web.socket.TextMessage
@@ -19,7 +19,7 @@ class UserCreatorChatRoomMessageBroker(
listenerContainer: RedisMessageListenerContainer listenerContainer: RedisMessageListenerContainer
) : MessageListener { ) : MessageListener {
init { init {
listenerContainer.addMessageListener(this, PatternTopic("$ROOM_CHANNEL_PREFIX:*")) listenerContainer.addMessageListener(this, ChannelTopic(ROOM_CHANNEL))
} }
fun publish(roomId: Long, memberId: Long, payload: String) { fun publish(roomId: Long, memberId: Long, payload: String) {
@@ -28,7 +28,7 @@ class UserCreatorChatRoomMessageBroker(
memberId = memberId, memberId = memberId,
payload = payload payload = payload
) )
stringRedisTemplate.convertAndSend(roomChannel(roomId), objectMapper.writeValueAsString(message)) stringRedisTemplate.convertAndSend(ROOM_CHANNEL, objectMapper.writeValueAsString(message))
} }
override fun onMessage(message: Message, pattern: ByteArray?) { override fun onMessage(message: Message, pattern: ByteArray?) {
@@ -50,11 +50,7 @@ class UserCreatorChatRoomMessageBroker(
} }
companion object { companion object {
private const val ROOM_CHANNEL_PREFIX = "v2:user-creator-chat:ws:room" private const val ROOM_CHANNEL = "v2:user-creator-chat:ws:room"
fun roomChannel(roomId: Long): String {
return "$ROOM_CHANNEL_PREFIX:$roomId"
}
} }
} }

View File

@@ -9,7 +9,7 @@ import org.mockito.Mockito
import org.springframework.data.redis.connection.Message import org.springframework.data.redis.connection.Message
import org.springframework.data.redis.connection.MessageListener import org.springframework.data.redis.connection.MessageListener
import org.springframework.data.redis.core.StringRedisTemplate import org.springframework.data.redis.core.StringRedisTemplate
import org.springframework.data.redis.listener.PatternTopic import org.springframework.data.redis.listener.ChannelTopic
import org.springframework.data.redis.listener.RedisMessageListenerContainer import org.springframework.data.redis.listener.RedisMessageListenerContainer
import org.springframework.web.socket.TextMessage import org.springframework.web.socket.TextMessage
import org.springframework.web.socket.WebSocketSession import org.springframework.web.socket.WebSocketSession
@@ -29,13 +29,13 @@ class UserCreatorChatRoomMessageBrokerTest {
) )
@Test @Test
@DisplayName("room channel로 target member와 payload를 publish한다") @DisplayName("고정 room channel로 target member와 payload를 publish한다")
fun shouldPublishMessageToRoomChannel() { fun shouldPublishMessageToRoomChannel() {
broker.publish(roomId = 10L, memberId = 20L, payload = "{\"type\":\"MESSAGE\"}") broker.publish(roomId = 10L, memberId = 20L, payload = "{\"type\":\"MESSAGE\"}")
val messageCaptor = ArgumentCaptor.forClass(String::class.java) val messageCaptor = ArgumentCaptor.forClass(String::class.java)
Mockito.verify(stringRedisTemplate).convertAndSend( Mockito.verify(stringRedisTemplate).convertAndSend(
Mockito.eq("v2:user-creator-chat:ws:room:10"), Mockito.eq("v2:user-creator-chat:ws:room"),
messageCaptor.capture() messageCaptor.capture()
) )
@@ -46,11 +46,11 @@ class UserCreatorChatRoomMessageBrokerTest {
} }
@Test @Test
@DisplayName("생성 시 ws room pattern topic을 구독한다") @DisplayName("생성 시 ws room 고정 channel topic을 구독한다")
fun shouldSubscribeRoomPatternOnCreation() { fun shouldSubscribeRoomChannelOnCreation() {
Mockito.verify(listenerContainer).addMessageListener( Mockito.verify(listenerContainer).addMessageListener(
Mockito.any(MessageListener::class.java), Mockito.any(MessageListener::class.java),
Mockito.eq(PatternTopic("v2:user-creator-chat:ws:room:*")) Mockito.eq(ChannelTopic("v2:user-creator-chat:ws:room"))
) )
} }