본문 바로가기

일상+자잘한 일

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

바보같이 pip install pika만 하고 rabbitMQ 자체를 설치하지 않았다...ㅎㅎ

 

윈도우 기준으로 choco를 설치하고 난 뒤에 아래 코드를 powershell에서 입력하면된다.

(choco 설치 방법 및 초코 설명 링크)

(혹은 이 링크로 직접설치도 가능하다 나는 choco가 편했다)

choco install rabbitmq

 

맥은 choco 대신 brew를 사용하면 되고 리눅스의 경우 아래 포스트를 참고하면 되겠다.

 

 

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

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

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_hello', 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코드

import pika, sys, os,time


def main():
    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)

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

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

    # 한 방에 몇개의 task 할지
    channel.basic_qos(prefetch_count=1)
    # channel.basic_consume(queue='hello', auto_ack=True, on_message_callback=callback) 자동 ACK방법
    channel.basic_consume(queue='hello', on_message_callback=callback)

    channel.start_consuming()


if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print("Shutting down")
        try:
            sys.exit(0)
        except SystemExit:
            os._exit(0)

 

 

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