도찐개찐
[Windows] RabbitMQ 설치 및 설정 본문
1. Windows RabbitMQ 설치하기
1.1. 설치 파일 찾아가기
얼랭 다운로드 경로
RabbitMQ 윈도우 버전 다운로드 경로
1.2. Erlang(얼랭) 설치하기
* 얼랭(Erlang)은 범용 병령 프로그래밍 언어이다. 원래는 에릭슨(Ericsson)사에서 스위칭 소프트웨어에서 사용하기 위해 개발 되었지만, 1998년 오픈 소스로 공개 되었다.
* RabbitMQ 는 얼랭언어로 실행되는 어플리케이션으로 얼랭 사전 설치가 필요하다.
* 골드만삭스(Goldman Sachs)는 2018년 얼랭에서 실행되는 RabbitMQ를 사용하여 메시징 시스템을 구축했다. 당시 골드만삭스에서 메시징 엔지니어링 팀을 운영하던 조너선 스크르지펙 (Jonathan Skrzypek)은 “시스템이 전송하는 메시지가 수백만 달러의 가치를 가질 수 있기 때문에 시스템에 결함이 없어야 한다”면서 “RabbitMQ는 탄력성과 신뢰 및 보장에 대한 부분 때문에 선택됐다”고 설명했다.
* 아래 내용 볼 필요 없이 설정 신경쓰지 말고 설치 순서 진행
otp_win64_25.3.exe
실행 : rabbitmq 설치 전 얼랭이 설치가 되어있지 않으면 설치해야 한다고 나오기 때문에 사전 설치가 필요합니다.
Next
클릭
- 특별히 경로를 변경하지 않을 거면
Next
클릭
- 이것도 설정할 게 없으므로
Next
클릭
- visual c++ 사용권 계약서 다 읽지 않을 것임으로
동의함
체크하고 바로설치
버튼 클릭
c++
설치 완료 되면닫기
- 얼랭 설치가 완료 됬으면
close
클릭
1.3. RabbitMQ 설치하기
* 아래 내용 볼 필요 없이 설정 신경쓰지 말고 설치 순서 진행
rabbitmq-server-3.11.11.exe
실행
Next >
버튼 클릭
- 설치 경로 바꾸지 않을 것임으로 바로
Install
버튼 클릭
Next >
버튼 클릭
- 실행 여부를 판단 및 체크, 언체크 하고
Finish
클릭
1.4. 정상 설치 여부 확인
시작
메뉴에RabbitMQ
관련 실행 파일 여부 확인
- 간단히 해당 실행 파일로 서비스를 올렸다 내렸다 가능 하니 참고 하시길 바랍니다.
- 서비스가 잘 올라가는지 내려가는지도 한번 체크!
- CMD(터미널) 실행 후
netstat -ano | findstr 5672
명령어 실행
- 위 이미지와 같이 5672 포트 사용이 표기 된다면 정상적으로 실행 된 것입니다.!
2. RabbitMQ
Management 실행
- CMD(터미널) 실행
RabbitMQ
를 설치 했던 경로내에sbin
경로로 디렉토리 이동을 해야 합니다.- 1.3. 항목에서 경로를 변경 하셨다면 변경한 경로의 sbin으로 이동 해주시면 됩니다.
C:\Users\sat> cd C:\"Program Files"\"RabbitMQ Server"\rabbitmq_server-3.11.11\sbin
- management 실행
C:\Program Files\RabbitMQ Server\rabbitmq_server-3.11.11\sbin> rabbitmq-plugins enable rabbitmq_management
- 정상적으로 실행 됬다면 아래와 같은 결과가 출력 되면 됩니다.
- management가 시작되었다고 나옵니다.
- 브라우저에서
http://localhost:15672
경로로 들어 가면 아래와 같은 화면이 확인 됩니다.
- 초기 계정 정보
guest
/guest
3. RabbitMQ 관리자 설정
Admin
탭 이동
3.1. 신규 관리자 생성
Admin
탭으로 이동 후 하단에 있는Add a user
버튼을 클릭하게 되면 새로운 유저를 등록 할 수 있는 입렵폼이 생성 됩니다.Username
: 관리자 아이디Password
:RabbitMQ
관리자 로그인 비밀번호Tags
: 사용 권한
- 우선 초기 계정을 그대로 운영할 수 없으므로 최고관리자 성격의 계정을 신규 생성 해 줍니다.
- 계정아이디, 비밀번호 생성 후
Tags
옆에 모달로 떠있는 항목중Admin
을 선택 하면 오른쪽 새로운 권한별 안내(계정권한 설정 해석)가 된 모달 팝업이 열리고 Tags 입력 태그 내administrator
텍스트가 자동 입력 됩니다.
- 모든 값을 입력하고 선택 한 뒤
Add user
버튼을 눌러주면 신규 계정이 생성 됩니다. - 동일한 방법으로 계정을 생성 관리 할 수 있습니다.¶
- 아래와 같이 내가 입력한 계정이 아무런 권한 없이 생성된 걸 볼 수 있습니다.
3.2. Virtual Host 설정
3.2.1. Virtual Host
란?
- 한마디로 정의 하면
Queue
접근에 대한 그룹핑으로 이해 하면 좋습니다.- ex)
RabbitMQ
를 이용해smsService
,pushServise
의 두가지 서비스를 운영할 예정이다. 이 두개의 서비스는 관계없이 운영할 예정으로 서로의Queue
나 설정을 알필요도 관심을 둘 필요도 없다고 가정 합니다 - 위 예제와 같은 경우 서비스 별로 서로 독립 된 구역을 나눠주는게 좋은데 그 단위로
Virtual Host
를 사용 할 수 있습니다.
- ex)
3.2.2. Virtual Host
추가¶
Admin
탭 > 오른쪽 하위 메뉴 중Virtual Hosts
클릭 >Add a new virtual host
클릭
- 생성 할
virtual host
이름, 설명, 태그,Queue Type
(Queue Type설명)을 정의 하고Add virtual host
버튼을 클릭
- 생성한 virtual host 존재 여부 확인
3.3. 관리자 권한 설정
Admin
탭 클릭 >Users
메뉴 확인- 3.1. 에서 생성 한 계정의
No Access
와 초기 계정으로 생성한safty
Virtual Host 가 초기계정으로 권한 설정이 되어 있는 것을 확인 할 수 있습니다.
3.3.1 권한 추가
- 권한을 추가 하고자 하는 계정 아이디를 클릭
- Permission 에서 (기본 Virtual Host : '
/
', 신규 생성 Virtual Host' : 'safty
') 추가하고 싶은 권한을 선택 후Set Permission
을 클릭 해 줍니다.
- 설정한 권한이 정상적으로 추가 되어 있는지 확인 합니다.
Admin
>Users
페이지 에서도 확인 합니다.
Admin
>Virtual Hosts
페이지 에서도 정상 연결이 됬는지 확인 가능 합니다.
4. 계정 삭제
Admin
>Users
> 삭제 대상 계정 아이디 클릭 >Delete this user
클릭
- !!초기 계정으로 로그인상태에서 본인 계정을 삭제 하는 경우 자동 로그아웃 처리 됩니다.
- 로그인 후 >
Admin
>Users
접근 후 계정 정상 삭제 확인
주석
1)
사용자에게 적용할 쉼표로 구분된 태그 목록입니다. 현재 관리 플러그인에서 지원하는 항목:
management
(관리, 집행)- 사용자는 관리 플러그인에 액세스할 수 있습니다.
policymaker
(정책 담당자)- 사용자는 관리 플러그인에 액세스하고 액세스 권한이 있는 가상 호스트에 대한 정책 및 매개변수를 관리할 수 있습니다.
monitoring
(모니터링)- 사용자는 관리 플러그인에 액세스하여 모든 연결 및 채널과 노드 관련 정보를 볼 수 있습니다.
administrator
(관리자)- 사용자는 모니터링이 할 수 있는 모든 것을 할 수 있고, 사용자, 가상 호스트 및 권한을 관리하고, 다른 사용자의 연결을 닫고, 모든 가상 호스트에 대한 정책 및 매개 변수를 관리할 수 있습니다.
- 여기에서 모든 태그를 설정할 수 있습니다. 위의 네 가지 태그에 대한 링크는 편의를 위한 것입니다.
2)
- 메시징 시스템 또는 RabbitMQ 사용 용어
Producing
: 메시지를 전송한다는 의미producer
: 메시지들을 전송하는 프로그램을 producer 라 부릅니다.Queue
: mailbox를 의미하며 RabbitMQ 시스템 내에 위치. consumer 대신에 RabbitMQ가 보관하는 메시지 버퍼 외부연동 서버에서 이 비동기 처리를 쉽게 구현하기 위하여 MQ(Message Queuing)를 사용한다.AMQP
:- 인스턴스가 데이터를 서로 교환할 때 사용하는 방법
- MQ를 오픈 소스에 기반한 표준 프로토콜이 AMQP(Advanced Message Queuing Protocol)이다.
- AMQP 자체가 프로토콜을 의미하기 때문에 이 프로토콜을 구현한 MQ제품들은 여러가지가 있으며 그 중 하나가 RabbitMQ이다.
AMQP
의 구성요소와 라우팅 알고리즘Exchange
: Publisher(Producer)로부터 수신한 메시지를 큐에 분배하는 라우터의 역할Queue
: 메시지를 메모리나 디스크에 저장했다가 Consumer에게 메시지를 전달하는 역할Binding
: Exchange와 Queue의 관계를 정의Exchange Type
(종류) : 메시지를 어떠한 방법으로 라우팅할지 결정하는 일종의 알고리즘
3)
- Exchange Type
Direct exchange
- (Empty string) and amq.direct- 1:1 관계로 Unicast 방식에 적합, 운드 로빈 방식으로 여러 workers(Consumer)간 task를 분리
- Exchange에 바인딩 된 Queue 중에서 메시지의 라우팅 키와 매핑되어 있는 Queue로 메시지를 전달한다.
Fanout exchange
- amq.fanout- 메시지의 라우팅 키를 무시하고 Exchange에 바인딩 된 모든 Queue에 메시지를 전달한다.
- 1:N 관계로 메시지를 브로드캐스트하는 용도로 사용된다.
Topic exchange
- amq.topic- Exchange에 바인딩 된 Queue 중에서 메시지의 라우팅 키가 패턴에 맞는 Queue에게 모두 메시지를 전달, Multicast 방식에 적합하다.
Headers exchange
- amq.match (and amq.headers in RabbitMQ)- 라우팅 키 대신 메시지 헤더에 여러 속성들을 더해 속성들이 매칭되는 큐에 메시지를 전달한다.
4)
- Queue Type
Quorum
Queue(쿼럼 큐)- 쿼럼 대기열은 Raft 합의 알고리즘을 기반으로 내구성 있고 복제된
FIFO
대기열을 구현하는 RabbitMQ용 최신 대기열 유형입니다 . RabbitMQ 3.8.0부터 사용할 수 있습니다. - 쿼럼 대기열 및 스트림은 더 이상 사용되지 않으며 제거 예정인 원래 복제 대기열 유형인 내구성 있는 미러 대기열을 대체합니다 .
- 쿼럼 대기열은 데이터 안전이 최우선인 일련 의 사용 사례 에 최적화되어 있습니다. 이것은 동기 부여 에서 다룹니다 . 쿼럼 대기열은 복제된 대기열 유형의 기본 옵션으로 간주되어야 합니다.
- 쿼럼 대기열은 또한 소비자가 동일한 메시지를 반복적으로 다시 대기열에 넣는 경우와 같은 워크로드별 대기열을 포함하여 기존 미러 대기열과 비교하여 동작 및 몇 가지 제한 사항 에 중요한 차이점이 있습니다 .
- 쿼럼 대기열은 Raft 합의 알고리즘을 기반으로 내구성 있고 복제된
Stream
(스트림)- 스트림은 비파괴 소비자 시맨틱을 사용하여 추가 전용 로그를 모델링하는 새로운 지속적 복제 데이터 구조입니다.
- 대기열인 것처럼 RabbitMQ 클라이언트 라이브러리를 통해 또는 전용 바이너리 프로토콜 플러그인 및 관련 클라이언트를 통해 사용할 수 있습니다.
- 후자의 옵션은 모든 스트림별 기능에 대한 액세스를 제공하고 가능한 최상의 처리량(성능)을 제공하므로 권장됩니다.
- 사용 사례
- 스트림은 초기에 기존 대기열 유형이 제공할 수 없거나 제공할 수 없는 단점이 있는 4가지 메시징 사용 사례를 다루기 위해 개발되었습니다
대형 팬아웃
: 여러 구독자에게 동일한 메시지를 전달하려는 경우 사용자는 현재 각 소비자에 대한 전용 대기열을 바인딩해야 합니다. 소비자 수가 많으면 특히 지속성 및/또는 복제를 원할 때 잠재적으로 비효율적입니다. 스트림을 사용하면 많은 소비자가 비파괴적인 방식으로 동일한 대기열에서 동일한 메시지를 소비할 수 있으므로 여러 대기열을 바인딩할 필요가 없습니다. 스트림 소비자는 읽기 로드가 클러스터 전체에 분산되도록 복제본에서 읽을 수도 있습니다.리플레이 / 시간 여행
: 현재의 모든 RabbitMQ 대기열 유형에는 파괴적인 소비 동작이 있으므로 소비자가 메시지 사용을 마치면 대기열에서 메시지가 삭제되므로 소비된 메시지를 다시 읽을 수 없습니다. 스트림을 사용하면 소비자가 로그의 어느 지점에나 첨부하고 거기에서 읽을 수 있습니다.처리 성능
: 영구 대기열 유형은 기존 로그 기반 메시징 시스템과 경쟁할 수 있는 처리량을 제공할 수 없습니다. 스트림은 성능을 주요 목표로 하여 설계되었습니다.대형 로그
: 대부분의 RabbitMQ 큐는 빈 상태로 수렴하도록 설계되었으며 이와 같이 최적화되어 지정된 큐에 수백만 개의 메시지가 있는 경우 성능이 저하될 수 있습니다. 스트림은 메모리 내 오버헤드를 최소화하면서 효율적인 방식으로 더 많은 양의 데이터를 저장하도록 설계되었습니다.
728x90
Comments