[RabbitMQ] Docker+RabbitMQ 하고 Python으로 메시지 생성하고 소비하기
in Development on Python
Docker+RabbitMQ 하고 Python으로 메시지 생성하고 소비하기 정리
0. RabiitMQ 란
- RabbitMQ는 메시지 브로커. 메시지를 수락하고 전달
- 예를 들어 우체국을 생각하면 됨. 우리는 보내려는 메일을 우체통에 넣으면 집배원이 메일을 받는 사람에게 배달해 줄거라고 믿음. RabbitMQ는 이러한 우체국의 역할을 함
- Producing : 보낸다는 것 이외의 의미가 없습니다. 메시지를 보내는 프로그램을 프로듀서(producer)라고 함
- 큐(queue) : RabbitMQ 내부에 있는 우체통(메시지 임시 저장소)의 이름. 메시지는 RabbitMQ 및 응용 프로그램을 통해 전달되고 큐에서만 저장. 큐는 호스트의 메모리 및 디스크 제한에 의해서만 제한되며, 본질적으로 큐는 큰 메시지 버퍼. 많은 프로듀서가 하나의 큐로 이동하는 메시지를 보낼 수 있으며 많은 컨슈머가 하나의 큐에서 데이터를 수신하려고 시도 할 수 있음
- Consuming 은 받는다는 의미와 비슷. 컨슈머(Consumer)는 메시지를 받기 위해 기다리고 처리하는 프로그램
1. 도커로 RabbitMQ 실행하기
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
2. RabbitMQ 접속하기
http://localhost:15672/
에 들어가서 id:guest/pw:guest로 접속- send 하면 큐에 들어가고 receive하면 그거 받을수 있음
- send 계속하고 receive하면 이전꺼 다 받아짐
3. send.py 만들기
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(
pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()
4. receive.py 만들기
#!/usr/bin/env python
import pika, sys, os
def main():
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
print('Interrupted')
try:
sys.exit(0)
except SystemExit:
os._exit(0)