WebSocket, Stomp로 통신 해보기 (2)

이형석·2024년 11월 28일

WebSocket, Stomp로 통신 해보기 (1)

단일 채팅방 시스템에서 여러 채팅방 시스템 도입하기

컨트롤러에서 @DetinationVariable 적용

수정 전

@MessageMapping("/chat")
@SendTo("/sub/chat")  
public ChatMessageResponse sendMessage(ChatMessageRequest request) {
	return new ChatMessageResponse(request.sender(), request.content());
}

수정 후

@MessageMapping("/chat.{chatRoomId}")
@SendTo("/sub/chat.{chatRoomId}")  
public ChatMessageResponse sendMessage(ChatMessageRequest request, @DestinationVariable Long chatRoomId) {
	//@DestinationVariable 애노테이션으로 받아서 처리 가능
    //(@PathVariable 느낌으로 사용 가능)
    
	return new ChatMessageResponse(request.sender(), request.content());
}

WebSocket 예외 처리

@ControllerAdvice
@RequiredArgsConstructor
public class WebSocketExceptionHandler {

    @MessageExceptionHandler
    // @SendToUser("/errors") /user/errors를 구독한 사용자에게 1대1로 메세지 전송
    public CustomErrorResponse handleCustomException(CustomException exception) {

        return new CustomErrorResponse(exception.getErrorCode(), exception.getMessage());
    }
}

* ChannelIntercepter를 이용해 WebSocket 메시지 전송 전, 전송 후 할 일을 설정 가능
ex) 구독 요청 메시지가 올 때, 인가를 처리

profile
금융IT 개발자

0개의 댓글