
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라도 사용하지 않는한 힘들다는걸 다시한번 깨달았습니다.