2020. 12. 10. 10:00ㆍmessaging
예제 프로젝트
https://github.com/cooingpop/rabbitmq-server
https://github.com/cooingpop/rabbitmq-client
cooingpop/rabbitmq-client
Contribute to cooingpop/rabbitmq-client development by creating an account on GitHub.
github.com
RabbitMQ
- Queue : 메시지를 담아놓는 Buffer
- Exchange : 메시지를 적절한 Queue로 옮기는 Routing 역할을 수행
- Routing Key : Exchange가 Routing할 때 사용하는 Key
- Binding : Exchange와 Queue를 Link하는 것
메시지 생산자(Publisher)가 메시지를 특정 Exchange & Queue에 전달하면, RabbitMQ는 해당 메시지를 적절한 구독자(Subscribe)가 소비(Consume)할 수 있도록
해당 메시지를 전달하는 역할을 수행.
Producers → [Exchange – Binding → Queue] → Consumers
메시지를 발행하는 Producer에서 Broker의 Exchange로 메시지를 전달하면, Binding이라는 규칙에 의해 연결된 Queue로 메시지가 복사된다.
메시지를 받아가는 Consumer에서는 브로커의 Queue를 통해 메시지를 받아가서 처리한다.
모든 메시지는 Queue로 직접 전달되지 않고, 반드시 Exchange에서 먼저 받는다. 그리고 Exchange Type과 Binding 규칙에 따라 적절한 Queue로 전달된다.
Name : Exchange 이름
Type : 메시지 전달 방식
Direct Exchange (unicast)
- 메시지에 포함된 routing key를 기반으로 Queue에 메시지를 전달한다.
Fanout Exchange (broadcast)
- routing key 관계없이 연결된 모든 Queue에 동일한 메시지를 전달한다.
Topic Exchange (multicast)
- routing key 전체가 일치하거나 일부 패턴과 일치하는 모든 Queue로 메시지가 전달된다.
- Topic Exchange 에서 사용하는 binding key는 점(.)으로 구분된 단어를 조합해서 정의한다.
- *과 #을 이용해 와일드 카드를 표현할 수 있으며, *는 단어 하나 일치, # 는 0 또는 1개 이상의 단어 일치를 의미한다.
Headers Exchange (multicast)
- 메시지 헤더를 통해 binding key만을 사용하는 것보다 더 다양한 속성을 사용할 수 있다.
- Header exchange를 사용하면 binding key는 무시되고, 헤더 값이 바인딩 시 지정된 값과 같은 경우에만 일치하는 것으로 간주한다.
설치 참고 사이트 : https://www.rabbitmq.com/install-rpm.html#running-rpm
Installing on RPM-based Linux (RedHat Enterprise Linux, CentOS, Fedora, openSUSE) — RabbitMQ
Installing on RPM-based Linux (RedHat Enterprise Linux, CentOS, Fedora, openSUSE) This guide covers RabbitMQ installation on RPM-based Linux (RedHat Enterprise Linux, CentOS, Fedora, openSUSE). RabbitMQ is included in standard Fedora and RHEL repositories.
www.rabbitmq.com
1. EPEL 설치 (Extra Packages for Enterprise Linux)
: RabbitMQ는 패키지 설치 방식이 권장사항, 이를 위해 추가 확장 패키지를 설치해야함.
EPEL 설치
yum install -y epel-release
2. Erlang 설치
: RabbitMQ는 Erlang 기반으로 개발되었기 떄문에 설치를 해야 함.
Erlang 설치
yum install -y erlang
3. RabbitMQ 설치
https://bintray.com/rabbitmq/all/download_file?file_path=rabbitmq-server%2F3.8.3%2Frabbitmq-server-3.8.3-1.el6.noarch.rpm
3.8.3.1 설치
rpm -Uvh rabbitmq-server-3.8.3-1.el6.noarch.rpm
DescriptionDownloadSignature
RPM for RHEL Linux 8.x, CentOS 8.x, Fedora 28+ (supports systemd) | rabbitmq-server-3.8.3-1.el8.noarch.rpm | Signature |
RPM for RHEL Linux 7.x, CentOS 7.x, Fedora 24+ (supports systemd) | rabbitmq-server-3.8.3-1.el7.noarch.rpm | Signature |
RPM for RHEL Linux 6.x, CentOS 6.x, Fedora prior to 19 | rabbitmq-server-3.8.3-1.el6.noarch.rpm | Signature |
RPM for openSUSE Linux | rabbitmq-server-3.8.3-1.suse.noarch.rpm | Signature |
RPM for SLES 11.x | rabbitmq-server-3.8.3-1.sles11.noarch.rpm | Signature |
rpm 설치시 오류발생하면
RabbitMQ 서명키
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
socat이 필요하다고 에러가 나는 경우 socat 설치
socat 설치
yum install socat
4. RabbitMQ management plugin 설정
rabbitmq-plugins enable rabbitmq_management
5. RabbitMQ 시작 / 종료
RabbitMQ 시작
service rabbitmq-server start
RabbitMQ 종료
service rabbitmq-server stop
6. 계정 정보 생성
: 계정 생성 및 수정은 RabbitMQ 서버가 실행된 상태에서 가능
계정 추가
: rabbitmqctl add_user [계정][패스워드]계정 추가
rabbitmqctl add_user admin 0000
계정 관리자로 등록
: rabbitmqctl set_user_tags [계정] administrator
관리자 계정 등록
rabbitmqctl set_user_tags admin administrator
7. RabbitMQ Management 접속
: https://localhost:15672 로 접속
Config 설정
참고 : https://www.rabbitmq.com/configure.html
서버 파일 위치 : /etc/rabbitmq/rabbitmq-env.conf
리눅스에선 rabbitmq-env.conf 이름을 사용하여 표준 환경변수 파일 사용
rabbitmq-env.conf
# Example rabbitmq-env.conf file entries. Note that the variables
# do not have the RABBITMQ_ prefix.
#
# Overrides node name
NODENAME=rabbit
# Specifies new style config file location
CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf
# Specifies advanced config file location
# ADVANCED_CONFIG_FILE=/etc/rabbitmq/advanced.config
포트는 변경가능 5672 사용중이면 5673으로 변경하여 사용 가능
서버 파일 위치 : /etc/rabbitmq/rabbitmq.conf
rabbitmq.conf
# rabbitmq-configuration
listeners.tcp.default = 5673
# management
management.tcp.port = 15673
#management.ssl.port = 15672
rabbitmq.conf 예제파일
포트내용
4369 | EPMD, Rabbit에서 사용하는 피어 검색 서비스 MQ 노드 및 CLI 도구 |
5672, 5671 | TLS 없이 AMQQ 0-9-1 및 1.0 클라이언트에서 사용 |
25672 | 노드 간 및 CLI 도구 통신에 사용 (Erlang 배포 서버 포트) AMQP 포트 + 20000으로 계산 동적 범위에서 할당 (기본적으로 단일 포트로 제한) |
35672-35682 | CLI 도구 (Erlang 배포 클라이언트 포트)에서 노드와의 통신에 사용 동적 범위 (서버 배포 포트 + 10000 ~ 서버 배포포트 + 10010 |
15672 | HTTP API 클라이언트, 관리 UI 및 rabbitmqadmin (관리 플러그인이 활성화된 경우에만 해당) |
61613, 61614 | TLS 미포함 및 관련 STOMP 클라이언트 (STOMP 플러그인이 사용하도록 설정된 경우에만) |
1883, 8883 | MQTT 플러그인이 사용 가능한 경우 TLS 가 없는 MQTT 클라이언트 |
15674 | STOMP-over-WebSockets 클라이언트 (Web STOMP 플러그인이 활성화된 경우에만) |
15675 | MQTT-over-WebSockets 클라이언트 (Web MQTT 플러그인이 활성화된 경우에만) |
15692 | 프로메테우스 메트릭스(프로메테우스 플러그인이 활성화된 경우에만) |