본문 바로가기

일상+자잘한 일

[RabbitMQ] 설치부터 튜토리얼까지 for Linux

우선 APT를 사용하여 설치하는 방법과 dpkg를 직접 설치하는 방법이 있다.

공식 문서에서는 패키지 종속성(dependency)를 수동으로 설치해야 해서 dpkg 방법을 권장하지 않는다.

공식 문서는 apt 방법을 권장한다.

 

1. apt 설치 방법으로 바로가기

2. dpkg 설치 방법으로 바로가기

3. 예제로 바로 가기


apt 설치 방법


 

https://cloudsmith.io/~rabbitmq/repos/ 이 링크에 최신 rabbitmq 버전을 올려두고 있지만 트래픽 제한으로 다운이 되지 않는 경우가 많기 때문에 아래와 같은 방법으로 따라오길 권장하고 있다.

 

우선 아래 코드들을 모두 빠짐없이 모두 기입해야한다.

이 과정 중에서 빼먹어도 되는 부분은 없다고 공식문서에서 명시하고 있다.

아래 코드는 cloudsmith quick start를 위한 스크립트이다.

#!/bin/sh

sudo apt-get install curl gnupg apt-transport-https -y

## Team RabbitMQ's main signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Community mirror of Cloudsmith: modern Erlang repository
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Community mirror of Cloudsmith: RabbitMQ repository
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null

## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main

# another mirror for redundancy
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main

## Provides RabbitMQ
##
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main

# another mirror for redundancy
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
EOF

## Update package indices
sudo apt-get update -y

## Install Erlang packages
sudo apt-get install -y erlang-base \
                        erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
                        erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
                        erlang-runtime-tools erlang-snmp erlang-ssl \
                        erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing

 

이후 필수적인 dependency 설치를 위한 명령을 입력한다.

sudo apt-get update -y

sudo apt-get install curl gnupg -y

 

cloudsmith mirror에서 패키지를 다운 받기 위해 http 패키지도 설치해야한다.

sudo apt-get install apt-transport-https

 

이후 레포지토리 승인 키를 입력한다.

sudo apt-get install curl gnupg apt-transport-https -y

## Team RabbitMQ's main signing key
curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Community mirror of Cloudsmith: modern Erlang repository
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Community mirror of Cloudsmith: RabbitMQ repository
curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null

 

이후 /etc/apt/sources.list.d/  경로로 가면 /etc/apt/sources.list.d/rabbitmq.list 가 있는 것을 확인 할 수 있다.

cat 명령어를 통해 rabbitmq.list를 확인하면 아래와 같은 내용일 것이다.

 

그리고 OS 버전에 따라 depedency를 다르게 하여 설치하는데 아래 표를 참고하면 된다.

 

필자의 경우 Ubuntu 22.04 버전을 사용하며 jammy로 설치하였다.

 

여기 아래 코드에서 $distribution으로 되어있는 부분을 각자의 버전으로 맞추면 된다.
(ex: $distribution -> jammy)

sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases from a Cloudsmith mirror
##
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu $distribution main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu $distribution main

# another mirror for redundancy
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu $distribution main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu $distribution main

## Provides RabbitMQ from a Cloudsmith mirror
##
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu $distribution main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu $distribution main

# another mirror for redundancy
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu $distribution main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu $distribution main
EOF

 

한번 더 업데이트를 해준 후

sudo apt-get update -y

 

아래 코드를 입력하면 설치가 끝난다!

## Install Erlang packages
sudo apt-get install -y erlang-base \
                        erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
                        erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
                        erlang-runtime-tools erlang-snmp erlang-ssl \
                        erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

## Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing

 

RabbitMQ는 sudo 권한을 필요로 한다.

# rabbitmq 시작
sudo systemctl start rabbitmq-server

# rabbitmq 종료
sudo systemctl stop rabbitmq-server

# rabbitmq 상태 확인
sudo systemctl status rabbitmq-server

잘 설치된 것을 확인할 수 있다.


dpkg 설치 방법


# sync package metadata
sudo apt-get update
# install dependencies manually
sudo apt-get -y install socat logrotate init-system-helpers adduser

# download the package
sudo apt-get -y install wget
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.3/rabbitmq-server_3.13.3-1_all.deb

# install the package with dpkg
sudo dpkg -i rabbitmq-server_3.13.3-1_all.deb

rm rabbitmq-server_3.13.3-1_all.deb

 

위의 코드를 사용하여 설치할 수 있고 자세한 버전 및 다운로드 사항은 아래 링크에서 확인할 수 있다.

https://www.rabbitmq.com/docs/install-debian#manual-installation

 

Installing on Debian and Ubuntu | RabbitMQ

<!--

www.rabbitmq.com


예제


설치 이후 래빗 튜토리얼을 따라 가며 필요한 기능을 습득하였고 코드로 간단히 설명하겠다.

혹 코드를 직접 작성하며 공부할 분들은 아래 링크로 가면 되겠다.

https://www.rabbitmq.com/tutorials

 

RabbitMQ Tutorials | RabbitMQ

<!--

www.rabbitmq.com

 

broker코드

import pika, sys

connection = pika.BlockingConnection(
    pika.ConnectionParameters('localhost'))
channel = connection.channel()

#혹 서버가 다운되더라도 메세지 save하는 방법 durable=True
#이름 안정하면 서버에서 자체적으로 지정할 수 있으나 exchange를 선언해야함(ex: amq.gen-JzTY20BRgKO-HjmUJj0wLg).
channel.queue_declare(queue='task_queue', durable=True)

message = ' '.join(sys.argv[1:]) or 'Hello World!'

#exchange, que이름, 메세지, 메세지save(영속성부여).
channel.basic_publish(
    exchange='',
    routing_key='hello',
    body=message,
    properties=pika.BasicProperties(
        delivery_mode=pika.DeliveryMode.Persistent
    ))

print(f" [x] Sent {message}")
connection.close()

consumer코드

#!/usr/bin/env python
import pika
import time

connection = pika.BlockingConnection(
    pika.ConnectionParameters(host='localhost'))
channel = connection.channel()

channel.queue_declare(queue='task_queue', durable=True)
print(' [*] Waiting for messages. To exit press CTRL+C')


def callback(ch, method, properties, body):
    print(f" [x] Received {body.decode()}")
    time.sleep(body.count(b'.'))
    print(" [x] Done")
    ch.basic_ack(delivery_tag=method.delivery_tag)

# 한방에 몇개의 일을 할지 정함
channel.basic_qos(prefetch_count=1)
channel.basic_consume(queue='task_queue', on_message_callback=callback)

channel.start_consuming()

 

 

실행 결과 잘 돌아가는 것을 확인할 수 있다.

 

참고자료: https://www.rabbitmq.com/docs/install-debian

 

Installing on Debian and Ubuntu | RabbitMQ

<!--

www.rabbitmq.com