[RabbitMQ] Queue에 존재하는 메세지 조회

LDB·2025년 12월 28일

RabbitMQ

목록 보기
6/7
post-thumbnail

❓작성계기

RabbitMQ를 공부하면서 현재 Queue에 어떤 메세지가 있는지 조회하고 싶었는데 이상하게 조회가 안되었습니다. 다행히 해결했고 이 에피소드를 기록으로 남기고 공유하면 좋을거 같아서 글을 써봅니다.


🔎 문제 및 해결

문제는 다음과 같았습니다. RabbitMQ로 메세지를 보내는건 성공했으나 이상하게 보낸메세지를 조회하려고 하니까 조회가 안되는 현상이었습니다.
하단에 작성한 코드는 RabbitMQ에서 조회하는 코드 입니다.

/**
 * Direct Queue에 등록되어 있는 메세지 Queue 불러오기
 */
public void receiveDirectMessage() {

	Object message = rabbitTemplate.receiveAndConvert(rabbitmqExchangeInfo.get_DIRECT_QUEUE_NAME());
    if (message != null) {
        System.out.println("Received: " + message);
    }

}

이처럼 Direct Exchange 방식으로 보낸 Queue를 조회하려고 하니 null 값이 리턴되었습니다.

그런데 생각해보니 Message Queue에 어떤메세지를 보냈는지 확인하고 싶어서 @RabbitListener 를 설정한 클래스가 있는게 생각이 났습니다.

@RabbitListener(queues = "direct.queue")
public void directMessage(String message){
    log.info("direct.queue 내의 메시지 반환 : {}", message);
}

혹시 이부분 때문에 에러가 나는게 아닌가 싶어서 해당 리스너를 주석처리하고 실행시켜본 결과

이렇게 보낸 메세지를 조회할 수 있었습니다, 저는 지금까지 이렇게 진행된다고 생각했습니다.

하지만 실제로는 하단의 이미지에 작성한 순서대로 실행되었습니다.

❗깨달은 점

RabbitMQ에서 메세지를 보내고 해당하는 메세지를 Queue에 차곡차곡 저장한다고 생각했습니다. 하지만 RabbitMQ는 결국 단순 메세지 전달 브로커일뿐 자체적으로 저장하는 기능은 Delay Queue라도 사용하지 않는한 힘들다는걸 다시한번 깨달았습니다.

profile
가끔은 정신줄 놓고 멍 때리는 것도 필요하다.

0개의 댓글