백엔드 Back-end/메시지 큐 Message Queue

Q. 래빗엠큐RabbitMQ를 종료하고 재시작하면 큐에 쌓여 있던 메시지가 사라질까?

Tap to restart 2023. 3. 4. 11:00

A. Durability 설정이 durable이고, Delivery mode가 persistent 라면 메시지가 남아 있다.

 

RabbitMQ 실행

우선 RabbitMQ를 실행하자. 
도커를 사용한다면 아래 명령어로 쉽게 RabbitMQ를 실행할 수 있다. 
 
/Users/taptorestart 부분은 여러분의 경로로 수정하면 된다.
참고: rabbitmq dockerhub

docker run --name rabbitmq \
	-p 5672:5672 \
	-p 15672:15672 \
	-v /Users/taptorestart/rabbitmq:/var/lib/rabbitmq \
	-d rabbitmq:3.11.10-management

 
실행했으면 접속하자.
http://localhost:15672/ 로 접속하고 id, password는 guest, guest이다. 변경하고 싶다면 도커 실행시 환경변수로 추가하면 된다.
 

Durability를 Durable로 설정한 큐

상단 메뉴 중 Queues를 눌러서 큐를 하나 추가하자.
이때 Durability(영속성)를 Durable(영속성이 있는)로 하자.

 
durable_queue가 추가되었다. durable_queue를 눌러서 큐로 들어가서 메시지를 추가하자.

 

Delivery mode - Non-persistent

아래로 스크롤 하다보면 Publish message란 게 있다.
기본 Delivery mode 1. Non-persistent로 원하는대로 입력해서 Publish message를 누른다. 그러면 메시지가 큐에 들어간다.

 
메시지가 들어간 것을 확인할 수 있다.

 
이제 도커에서 종료하고 재시작하자.
도커에서 종료를 눌렀다. 

Error: could not connect ... 서버 연결할 수 없다고 에러 메시지가 나온다.

다시 도커를 시작하자!

메시지가 사라졌다! Non-persistent, 즉 비지속적인 메시지니 당연하다고 볼 수 있다.

Delivery mode - Persistent

다시 메시지를 추가하자. 이번에는 Persistent로 Delivery mode를 설정하자.

다시 메시지가 추가된 것을 볼 수 있다.

다시 도커 종료.
그리고 재시작.
이번에는 메시지가 살아난 것을 볼 수 있다. Persistant 지속적으로 설정한 메시지니 당연하다고 볼 수 있다.
 

 
Get Messages를 눌러보면
Persistent message란 Payload가 실린 것을 확인할 수 있다.

Durability를 transient로 설정한 큐

새로 큐를 만들자.
이번 큐는 Durability를 transient, 일시적인으로 설정하자.

그리고 persistent로 설정해서 메시지를 추가하자.

메시지가 추가되었다.

다시 도커를 중지하고 시작하자.
transient_queue는 큐 자체가 사라졌다! 일시적인 큐였으니 어떻게 보면 당연하다. 당연히 메시지도 사라졌다.
 

 
durable_queue에 있는 메시지는 다시 살아난 것을 볼 수 있다.

 

참고

RabbitMQ Queues