Please Enable JavaScript!
Mohon Aktifkan Javascript![ Enable JavaScript ]

[MESSAGING] RABBITMQ SPRING BOOT

2020. 12. 10. 10:00messaging

728x90

예제 프로젝트

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 예제파일

rabbitmq.conf.example.txt
0.03MB

 

포트내용

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 프로메테우스 메트릭스(프로메테우스 플러그인이 활성화된 경우에만)
728x90