저는 리눅스 기반 Ubuntu에서 rabbitmq를 설치했습니다.

 

RabbitMQ의 기본 구조는 다음과 같다.

메시지를 발행하는 Producer 에서 Broker 의 Exchange 로 메시지를 전달하면, Binding 이라는 규칙에 의해 연결된 Queue 로 메시지가 복사된다. 메시지를 받아가는 Consumer 에서는 브로커의 Queue를 통해 메시지를 받아가서 처리한다.

 

서비스용 계정생성

우분투에서 웹브라우저를 열고 http://localhost:15672 (Management plugin)로 접속해주면 자신이 설정한 RabbitMQ 계정을 입력하라고 나오고, 관리자로 설정한 계정으로 로그인을 하게되면 RabbitMQ GUI로 접속하게 된다.

상단에 'Admin'이라는 메뉴에서 Users 기능으로 계정을 관리할 수 있다.

Tags : 계정의 권한을 부여한다. Admin, Monitoring, Policymaker, Management, None 이렇게 5가지 종류가 있다. Admin은 말그대로 Rabbitmq를 마음대로 주무를 수 있는 관리자 계정이고 Monitoring은 조회만 가능하다. Policymaker, Management 등등이 있는데 이 문서는 초보용이니 설명은 과감히 생략! 주의 사항으로 계정의 권한을 최소한 Management 로 설정해 주어야 Management Plugin에 접속이 가능하다. Tags 라는 이름 답게 여러개 설정이 가능하다.

Virtual Host : Queue와 계정을 그룹핑 하는 개념이다. 하나의 계정은 여러 Virtual Host을 할당 받을 수 있으며 자신에게 할당된 Virtual Host에 속한 Queue에만 접근이 가능하다.

 

Exchange 와 Queue 를 연결하는 Bindings

모든 메시지는 Queue 로 직접 전달되지 않고, 반드시 Exchange 에서 먼저 받는다. 그리고 Exchange Type  Binding 규칙에 따라 적절한 Queue 로 전달된다. 아래와 같은 속성을 갖는다.

  • Name : Exchange 이름
  • Type : 메시지 전달 방식
    1. Direct Exchange
    2. Fanout Exchange
    3. Topic Exchange
    4. Headers Exchange
  • Durability : 브로커가 재시작 될 때 남아 있는지 여부(durable, transient)
  • Auto-delete : 마지막 Queue 연결이 해제되면 삭제

 

메시지를 보관하는 Queue

Consumer 어플리케이션은 Queue 를 통해 메시지를 가져간다. Queue 는 반드시 미리 정의해야 사용할 수 있다.

  • Name : queue 이름. amq. 로 시작하는 이름은 예약되어 사용할 수 없다.
  • Durability : durable 은 브로커가 재시작 되어도 디스크에 저장되어 남아 있고, transient 으로 설정하면 브로커가 재시작 되면 사라진다. 단, Queue 에 저장되는 메시지는 내구성을 갖지 않는다.
  • Auto delete : 마지막 Consumer 가 구독을 끝내는 경우 자동으로 삭제된다.
  • Arguments : 메시지 TTL, Max Length 같은 추가 기능을 명시한다.

 

하나의 연결을 공유하는 Channels

Consumer 어플리케이션에서 Broker 로 많은 연결을 맺는 것은 바람직하지 않다. RabbitMQ는 Channel 이라는 개념을 통해 하나의 TCP 연결을 공유해서 사용할 수 있는 기능을 제공한다. 하지만 멀티 스레드, 멀티 프로세스를 사용하는 작업에서는 각각 별도의 Channel 을 열고 사용하는 것이 바람직하다.

반응형

+ Recent posts