2018년 이전 관심사/통신프로토콜(16)
-
[RabbitMQ #7] Routing
Exchange의 "direct" type을 이용하여, 특정 routing_key를 binding Queue에게 Publisher가 데이터를 보내고, Consumer가 데이터를 수신하는 방법을 설명 한다. 아래 그림의 경우, Publisher가 Excahnge에게 "info" routing_key로 메시지를 보내면, Consumer2가 데이터를 수신 하고, "error" routing_key로 메시지를 보내면 Consumer1 & Consumer2가 데이터를 수신 한다. 즉 아래 방식을 사용하면, Publisher는 원하는 Queue에게만 메시지를 보낼 수 있고, Consumer는 원하는 Queue의 메시지만 수신 할 수 있다. receive_logs.direct.py import pika import ..
2022.02.23 -
[RabbitMQ #6] Publish/Subscribe
앞에 [RabbitMQ #2]Simple Send/Receive 예제에서는 Queue에 직접 메시지를 보내고 Queue에서 직접 메시지를 받았다. 본 글에서는 Exchanges를 사용해 Pub/Sub 메시지 구조를 구현하는 방법을 설명 한다. Exchange type을 fanout으로 설정 하면, Exchange에 Binding 되어 있는 모든 Queue에게 메시지를 전달 한다. 이 기능을 이용해 Pub/Sub 메시지 구조를 구현 할 수 있다. - Subscriber #1/#2에서 "logs" Exchange를 Binding 하면 Pub/Sub 구조에서 Subscribe 하는 동작과 유사하게 동작 한다. - Publisher가 "info: Hello World!" 메시지를 "logs" Exchange에 ..
2022.02.22 -
[RabbitMQ #99] Exchanges Type
Exchanges Type Exchanges는 메시지에 포함된 routing_key와 일치하는 Queue에 메시지를 전달한다. RabbitMQ는 다음과 같은 4개의 Exchanges Type을 지원하며, Exchange에 대한 자세한 내용은 [AMQP] AMQP(Advanced Message Queuing Protocol) 에서 확인 할 수 있다. Direct Exchange Producer가 보내는 메시지의 routing_key와 일치 하는 Queue에게만 데이터를 보냄 Fanout Exchange Binding 되어 있는 모든 Queue에게 데이터를 보냄 Topic Exchange 와일드 카드(*,#)를 이용해 메시지를 Queue에 매칭하는 방법 * : 하나의 단어를 의미 # : 0개 이상의 단어를 ..
2022.02.21 -
[RabbitMQ #99] Server Connection 방법
pika를 이용해 RabbitMQ Server Connection 방법을 정리 한다. ConnectionParameters ConnectionParameter를 이용하여 접속할 Server 정보를 입력하는 방법 장점 : host, port 및 RabbitMQ의 virtual_host 설정도 가능 import pika # Set the connection parameters to connect to rabbit-server1 on port 5672 # on the / virtual host using the username "guest" and password "guest" credentials = pika.PlainCredentials('guest', 'guest') parameters = pika.Co..
2022.02.20 -
[RabbitMQ #5] Queue & Message 보존 설정 및 Fair Dispatch
Delivery Acknowledgement Timeout RabbitMQ Server가 Publisher가 보낸 데이터를 가지고 있고, 해당 데이터를 수신한 Consumer가 하나도 없다고 가정 한다. 이런 경우, 새로운 Consumer가 start_consuming()을 수행 하면, 새로운 Consumer는 Queue에 Binding 된 데이터를 모두 수신 할 수 있다. 만약 Consumer가 수행 되지 않아 RabbitMQ Server가 데이터를 계속 가지고 있다면, RabbitMQ Server는 Delivery Acknowledgement Timeout(Default : 30초) 시간 동안 보관 하고 이후 데이터를 ACK 받은 것으로 처리 한다. Delivery Acknowledgement Tim..
2022.02.19 -
[RabbitMQ #4] 경쟁 소비자 패턴(Competing Consumer Pattern)
경쟁 소비자 패턴(Competing Consumer Pattern) 여러 소비자가 동시에 메시지 큐에 있는 메시지를 처리 할 수 있도록 하는 설계 패턴 사용량이 많은 시스템에서 요청으로 인한 병목 현상을 피하기 위해 소비자 사이에서 부하를 분산 함 다수의 메시지를 분산 처리 하기 위한 환경에 적합 수신을 위한 서비스가 여러 메시지를 동시에 처리 할 수 있도록 다수의 경쟁 소비자를 단일 채널에 생성 송신자가 메시지를 메시지 큐에 전달하면, 소비자 중에서 하나의 수신자가 메시지 수신 Consumer( consumer.py ) connection = pika.BlockingConnection(pika.URLParameters('amqp://admin:admin@192.168.0.3:5672/')) channe..
2022.02.18