[RabbitMQ] Docker+RabbitMQ 하고 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)

참고






© 2018. by statssy

Powered by statssy