STOMP 비즈니스 로직에 따른 예외 처리

Alex·2025년 1월 26일
0

Plaything

목록 보기
88/118

Stomp Interceptor가 메시지를 가로챘을 때 발생한 예외들은 처리했지만

메시지를 전송하기 전(Interceptor가 낚아채기 전)
비즈니스 로직으로 던져진 예외들은 처리가 안됐다.

서버에서는 이렇게 예외가 발생해도

클라이언트는 예외 메시지를 받지 못하고 있다.

1차 시도

우선, error 채널을 구독하게 하고

메시지가 전달되게 해봤다.
다만, 이렇게 하니까 주소에 세션 id가 들어가버려서

이렇게 되는... 클라이언트에서는 세션 id를 알 수 없으니 이렇게 채널을 만들면 안된다.

Stomp에서 /user prefix는 뭐야?

스프링에서 /user prefix에 대해서 특별한 처리를 해준다.

스프링 부트는 /user라는 prefix가 붙은 destination(/user/queue/position-updates )을 인지한다.

그리고, UserDestinationMessageHandler가 내부적으로 이 destination을 해당 유저의 세션에 유니크한 채널(/queue/position-updates-user123)로 변경해준다.


    @MessageExceptionHandler(RuntimeException.class)
    public void handleRuntimeException(RuntimeException ex) {
        messagingTemplate.convertAndSend(
                "/user/queue/errors",
                ex.getMessage()
        );
    }
    

그래서 이런식으로 변경을 해주었다.

그럼 에러 채널을 구독했기에 위처럼 비즈니스 로직에 따른 예외메시지를 받게 된다.

profile
답을 찾기 위해서 노력하는 사람

0개의 댓글