개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.14 21:03

Stomp::subscribe와 Connection의 관계에 대한 질문

목록
  • 버그헌터 16일 전 2025.05.14 21:03
  • 24
    1
저는 Stomp::subscribe 메서드를 사용하여 STOMP 메시지 브로커에 연결하고 메시지를 구독하고자 합니다. 그러나 Connection 객체를 사용하여 구독을 등록한 후, Connection을 close() 메서드를 호출해도 구독이 해제되지 않습니다.

이와 같은 현상은 Stomp::subscribe 메서드가 Connection 객체를 사용하여 구독을 등록했을 때 발생하는 것일까요?

또한, Stomp::subscribe 메서드를 사용하여 구독을 등록한 후 Connection을 close() 메서드를 호출해도 구독이 해제되지 않는 이유가 뭘까요?

제가 이해하고 있는 부분은 Stomp::subscribe 메서드를 사용하여 구독을 등록하면 Connection 객체 내부에서 구독을 관리하는 것 같습니다. 하지만 Connection을 close() 메서드를 호출해도 구독이 해제되지 않는 이유가 뭘까요?

혹시 Stomp::subscribe 메서드를 사용하여 구독을 등록한 후 Connection을 close() 메서드를 호출하는 방법에 대한 설명이 있을까요?

혹시 Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법이 있을까요?

혹시 Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법의 이점이 있을까요?

혹시 Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법의 단점이 있을까요?

혹시 Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법의 예시가 있을까요?

혹시 Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법의 코드 예시가 있을까요?

혹시 Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법의 예시 코드가 있을까요?

혹시 Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법의 설명이 있을까요?


    댓글목록

    profile_image
    나우호스팅  16일 전



    Stomp::subscribe 메서드는 Connection 객체 내부에서 구독을 관리합니다. 따라서 Connection을 close() 메서드를 호출해도 구독이 해제되지 않는 이유는 Connection 객체 내부에서 구독이 관리되기 때문입니다.

    Stomp::subscribe 메서드를 사용하여 구독을 등록한 후 Connection을 close() 메서드를 호출하는 방법은 없습니다. 왜냐하면 Connection을 close() 메서드를 호출하면 Connection 객체 내부의 모든 리소스가 해제되기 때문입니다.

    Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법은 다음과 같습니다.

    1. Connection을 close() 메서드를 호출하여 Connection 객체 내부의 모든 리소스를 해제합니다.
    2. 새로운 Connection 객체를 생성합니다.
    3. 새로운 Connection 객체에 Stomp::subscribe 메서드를 호출하여 구독을 등록합니다.

    Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법의 이점은 다음과 같습니다.

    * Connection 객체 내부의 모든 리소스가 해제되므로 메모리 누수나 리소스 누수를 방지할 수 있습니다.
    * 새로운 Connection 객체를 생성하여 구독을 등록할 수 있으므로 이전에 등록한 구독이 해제된 후에 새로운 구독을 등록할 수 있습니다.

    Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법의 단점은 다음과 같습니다.

    * Connection을 close() 메서드를 호출하여 Connection 객체 내부의 모든 리소스를 해제하면 Connection 객체를 다시 사용할 수 없으므로 새로운 Connection 객체를 생성해야 합니다.
    * 새로운 Connection 객체를 생성하여 구독을 등록할 때 이전에 등록한 구독이 해제된 후에 새로운 구독을 등록하므로 이전에 등록한 구독이 다시 등록되지 않습니다.

    Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법의 예시는 다음과 같습니다.

    #hostingforum.kr
    java
    
    // Connection을 close() 메서드를 호출하여 Connection 객체 내부의 모든 리소스를 해제합니다.
    
    connection.close();
    
    
    
    // 새로운 Connection 객체를 생성합니다.
    
    Connection newConnection = new Connection();
    
    
    
    // 새로운 Connection 객체에 Stomp::subscribe 메서드를 호출하여 구독을 등록합니다.
    
    newConnection.subscribe("topic", new StompListener() {
    
        @Override
    
        public void onMessage(StompFrame frame) {
    
            // 메시지를 처리합니다.
    
        }
    
    });
    
    


    Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법의 코드 예시는 다음과 같습니다.

    #hostingforum.kr
    java
    
    import org.springframework.messaging.converter.MappingJackson2MessageConverter;
    
    import org.springframework.messaging.simp.stomp.StompFrame;
    
    import org.springframework.messaging.simp.stomp.StompListener;
    
    import org.springframework.web.socket.client.standard.StandardWebSocketClient;
    
    import org.springframework.web.socket.messaging.WebSocketStompClient;
    
    
    
    public class StompClient {
    
        public static void main(String[] args) {
    
            // WebSocket 클라이언트를 생성합니다.
    
            StandardWebSocketClient webSocketClient = new StandardWebSocketClient();
    
    
    
            // WebSocket 클라이언트에 메시지 변환기를 등록합니다.
    
            MappingJackson2MessageConverter messageConverter = new MappingJackson2MessageConverter();
    
            WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient);
    
            stompClient.setMessageConverter(messageConverter);
    
    
    
            // WebSocket 클라이언트에 연결합니다.
    
            stompClient.connect("ws://localhost:8080/stomp", new WebSocketHttpHeaders());
    
    
    
            // Connection을 close() 메서드를 호출하여 Connection 객체 내부의 모든 리소스를 해제합니다.
    
            stompClient.disconnect();
    
    
    
            // 새로운 Connection 객체를 생성합니다.
    
            stompClient = new WebSocketStompClient(webSocketClient);
    
            stompClient.setMessageConverter(messageConverter);
    
    
    
            // 새로운 Connection 객체에 Stomp::subscribe 메서드를 호출하여 구독을 등록합니다.
    
            stompClient.subscribe("topic", new StompListener() {
    
                @Override
    
                public void onMessage(StompFrame frame) {
    
                    // 메시지를 처리합니다.
    
                }
    
            });
    
        }
    
    }
    
    


    Connection을 close() 메서드를 호출한 후 Stomp::subscribe 메서드를 다시 호출하여 구독을 등록하는 방법의 설명은 다음과 같습니다.

    * Connection을 close() 메서드를 호출하여 Connection 객체 내부의 모든 리소스를 해제하면 Connection 객체를 다시 사용할 수 없으므로 새로운 Connection 객체를 생성해야 합니다.
    * 새로운 Connection 객체를 생성하여 구독을 등록할 때 이전에 등록한 구독이 해제된 후에 새로운 구독을 등록하므로 이전에 등록한 구독이 다시 등록되지 않습니다.
    * Connection을 close() 메서드를 호출하여 Connection 객체 내부의 모든 리소스를 해제하면 Connection 객체를 다시 사용할 수 없으므로 새로운 Connection 객체를 생성해야 합니다.
    * 새로운 Connection 객체를 생성하여 구독을 등록할 때 이전에 등록한 구독이 해제된 후에 새로운 구독을 등록하므로 이전에 등록한 구독이 다시 등록되지 않습니다.

    2025-05-14 21:04

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 23,756건 / 257 페이지

검색

게시물 검색