Skip to content

Commit 4948863

Browse files
committed
feat(be):Add publisher implementation for RabbitMQ integration
1 parent c8eb08c commit 4948863

File tree

6 files changed

+97
-32
lines changed

6 files changed

+97
-32
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.back.koreaTravelGuide.domain.userChat.chatmessage.usecase
2+
3+
interface ChatMessagePublisher {
4+
fun publishUserChat(
5+
roomId: Long,
6+
payload: Any,
7+
)
8+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.back.koreaTravelGuide.domain.userChat.chatmessage.usecase
2+
3+
import org.springframework.amqp.rabbit.core.RabbitTemplate
4+
import org.springframework.context.annotation.Profile
5+
import org.springframework.stereotype.Component
6+
7+
@Profile("prod")
8+
@Component
9+
class RabbitChatMessagePublisher(
10+
private val rabbitTemplate: RabbitTemplate,
11+
) : ChatMessagePublisher {
12+
override fun publishUserChat(
13+
roomId: Long,
14+
payload: Any,
15+
) {
16+
val routingKey = "userchat.$roomId"
17+
rabbitTemplate.convertAndSend("amq.topic", routingKey, payload)
18+
}
19+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.back.koreaTravelGuide.domain.userChat.chatmessage.usecase
2+
3+
import org.springframework.context.annotation.Profile
4+
import org.springframework.messaging.simp.SimpMessagingTemplate
5+
import org.springframework.stereotype.Component
6+
7+
@Profile("!prod")
8+
@Component
9+
class SimpleChatMessagePublisher(
10+
private val messagingTemplate: SimpMessagingTemplate,
11+
) : ChatMessagePublisher {
12+
override fun publishUserChat(
13+
roomId: Long,
14+
payload: Any,
15+
) {
16+
messagingTemplate.convertAndSend("/topic/userchat/$roomId", payload)
17+
}
18+
}

src/main/kotlin/com/back/koreaTravelGuide/domain/userChat/config/UserChatWebSocketConfig.kt

Lines changed: 0 additions & 31 deletions
This file was deleted.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.back.koreaTravelGuide.domain.userChat.stomp
2+
3+
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter
4+
import org.springframework.amqp.support.converter.MessageConverter
5+
import org.springframework.beans.factory.annotation.Value
6+
import org.springframework.context.annotation.Bean
7+
import org.springframework.context.annotation.Configuration
8+
import org.springframework.context.annotation.Profile
9+
import org.springframework.messaging.simp.config.ChannelRegistration
10+
import org.springframework.messaging.simp.config.MessageBrokerRegistry
11+
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker
12+
import org.springframework.web.socket.config.annotation.StompEndpointRegistry
13+
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer
14+
15+
// userChat에서만 사용할 것 같아서 전역에 두지 않고 userChat 도메인에 두었음
16+
17+
@Profile("prod")
18+
@Configuration
19+
@EnableWebSocketMessageBroker
20+
class UserChatRabbitWebSocketConfig(
21+
private val userChatStompAuthChannelInterceptor: UserChatStompAuthChannelInterceptor,
22+
@Value("\${spring.rabbitmq.host}") private val rabbitHost: String,
23+
@Value("\${spring.rabbitmq.stomp-port}") private val rabbitStompPort: Int,
24+
@Value("\${spring.rabbitmq.username}") private val rabbitUsername: String,
25+
@Value("\${spring.rabbitmq.password}") private val rabbitPassword: String,
26+
) : WebSocketMessageBrokerConfigurer {
27+
override fun registerStompEndpoints(registry: StompEndpointRegistry) {
28+
registry.addEndpoint("/ws/userchat")
29+
.setAllowedOriginPatterns("*")
30+
.withSockJS()
31+
}
32+
33+
override fun configureMessageBroker(registry: MessageBrokerRegistry) {
34+
registry
35+
.setApplicationDestinationPrefixes("/pub")
36+
.enableStompBrokerRelay("/topic")
37+
.setRelayHost(rabbitHost)
38+
.setRelayPort(rabbitStompPort)
39+
.setClientLogin(rabbitUsername)
40+
.setClientPasscode(rabbitPassword)
41+
.setSystemLogin(rabbitUsername)
42+
.setSystemPasscode(rabbitPassword)
43+
}
44+
45+
override fun configureClientInboundChannel(registration: ChannelRegistration) {
46+
registration.interceptors(userChatStompAuthChannelInterceptor)
47+
}
48+
49+
@Bean
50+
fun rabbitMessageConverter(): MessageConverter = Jackson2JsonMessageConverter()
51+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.back.koreaTravelGuide.domain.userChat.config
1+
package com.back.koreaTravelGuide.domain.userChat.stomp
22

33
import com.back.koreaTravelGuide.common.security.JwtTokenProvider
44
import org.springframework.messaging.Message

0 commit comments

Comments
 (0)