원문에는 --rm 옵션이 있어서 도커를 종료하면 삭제하도록 되어있는데 여기서는 제외 시켰다.
5672는 RabbitMQ가 서비스 하는 포트이고 15672 포트는 RabbitMQ 관리자 페이지이다.
관리자 페이지의 기본 계정은 guest/guest이다.
RabbitMQ 관리자 페이지
exchange 생성
RabbitMQ를 사용하면서 처음 할 일은 교환기인 Exchange를 설정하는 일이다.
로그인 후 [Exchanges] 하단의 [Add a new exchange]를 통해 exchange를 추가해줄 수 있다. 중간의 Type에서 [direct], [fanout], [headers], [topic] 옵션을 선택할 수 있다.
새로운 Exchange 추가
하지만 만드는건 별거 아니니 일단 기본으로 등록되어있는 Exchange들을 사용해보자.
기본으로 등록되어있는 Exchange 들
Queue 생성
다음은 Exchange에 전달된 메시지들을 저장해두는 Queue를 만들어주자.
[Queues and Streams] 하단의 [Add Queue] 메뉴를 이용한다. Queue의 이름 정도만 지정해주자.
Queue 추가하기
추가로 fanoutQueue, topicQueue도 동일한 방법으로 추가한다.
Queue 추가 결과
QueueBinding
Queue Binding
다음으로 등록된 Queue를 특정 Exchange에 바인딩 시켜주자. 지금은 direct 타입의 Exchange에 연결한다. 위의 Queue 추가 결과의 Name에 있는 [directQueue]를 클릭하여 바인딩 화면으로 진입 후 from exchange와 routing key를 지정한다.
Queue Binding
From exchange는 대상 큐를 의미하며 amq.direct는 direct 타입의 Exchange이다. direct는 특정 대상에 대한 연결이기 때문에 반드시 [Routing key]를 등록해야 한다.
Binding 결과는 Bindings 부분에서 확인 가능하다.
추가로 amq.fanout을 추가하는데 이때는 routing key를 생략한다. 마지막으로 amq.topic에는 sports.#이라고 입력하자.
topic의 wildcard
RabbitMQ의 Topic Exchange는 메시지의 Routing Key와 큐를 바인딩할 때 사용하는 바인딩 키(Binding Key)의 패턴을 매칭시켜 메시지를 전달한다. 기본적으로 Topic Exchange에서 Routing Key는 반드시 점(.)으로 구분된 단어들의 집합이어야 한다. (예: stock.usd.nyse, quick.orange.rabbit)
이때 패턴을 만들기 위해 두 가지 와일드카드를 사용한다.
1. * (별표)
의미: 정확히 **단어 하나(1개)**를 대체한다.
특징: 점(.)과 점 사이의 한 구간에 반드시 어떤 단어가 와야 할 때 사용
예시:*.orange.*
quick.orange.rabbit (매칭 성공)
lazy.orange.elephant (매칭 성공)
orange.rabbit (매칭 실패 - 앞에 단어가 하나 더 있어야 함)
quick.orange.male.rabbit (매칭 실패 - *은 단어 하나만 담당하므로 중간에 단어가 더 있으면 안 됨)
2. # (우물 정/해시)
의미:0개 이상의 단어를 대체합니다.
특징: 단어가 없어도 되고, 한 개여도 되고, 여러 개여도 상관없을 때 사용하는 가장 강력한 와일드카드
예시:lazy.#
lazy.pink.rabbit (매칭 성공)
lazy.orange (매칭 성공)
lazy (매칭 성공 - 0개 단어도 포함하므로)
quick.lazy.rabbit (매칭 실패 - 시작이 lazy가 아님)
3. 기타
#만 사용했을 때:바인딩 키를#하나로만 설정하면 루팅 키에 상관없이 모든 메시지를 받음. Fanout Exchange와 동일
와일드카드를 쓰지 않았을 때:*이나#없이 정확한 단어만 사용하면 루팅 키가 정확히 일치해야 함. Direct Exchange와 동일