일상+자잘한 일
[RabbitMQ] 설치부터 튜토리얼까지 for Linux,Window,Mac
높은곳에영광
2024. 6. 20. 21:22
바보같이 pip install pika만 하고 rabbitMQ 자체를 설치하지 않았다...ㅎㅎ
윈도우 기준으로 choco를 설치하고 난 뒤에 아래 코드를 powershell에서 입력하면된다.
(혹은 이 링크로 직접설치도 가능하다 나는 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)
실행 결과 잘 돌아가는 것을 확인할 수 있다.