저는 리눅스 기반 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 : 메시지 전달 방식
- Direct Exchange
- Fanout Exchange
- Topic Exchange
- 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 을 열고 사용하는 것이 바람직하다.
'프로그래밍 > RabbitMQ & Kafka' 카테고리의 다른 글
RabbitMQ 쓰는이유 (0) | 2022.01.12 |
---|---|
[Kafka] Maven project 로 Producer와 Consumer 작성해보기 (주석설명추가) (0) | 2021.12.06 |
[Kafka] Maven project 로 Producer와 Consumer 작성해보기 (0) | 2021.11.30 |
[RabbitMQ] Ubuntu에서 RabbitMQ 튜토리얼 따라하기 (Pub/Sub JAVA) (0) | 2021.11.22 |