Spring Cloud/RabbitMQ: 32개의 글
RabbitMQ AMQP 프로토콜을 구현해 놓은 프로그램 신뢰성, 안정성과 성능을 충족할 수 있도록 다양한 기능 제공 유연한 라우팅: Message Queue가 도착하기 전에 라우팅 되며 플러그인을 통해 더 복잡한 라우팅도 가능 클러스터링: 로컬 네트워크에 있는 여려 RabbitMQ 서버를 논리적으로 클러스터링 할 수 있고 논리적인 브로커도 가능 함. 오픈 소스로 상업적 지원이 가능 Kafka 대용량 실시간 로그 처리에 특화되어 설계된 메시징 시스템 기좀 범용 메시징 시스템 대비 TPS(Transaction Per Second)가 매우 우수함 특화된 시스템이기 때문에 범용 메시징 시스템에서 제공하는 다양한 기능들은 제공 되지 않음 AMQP 프로토콜이나 JMS API를 사용하지 않고 단순한 메시지 헤더를 ..
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개 이상의 단어를 ..
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..
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 ..
앞에 [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에..
RabbitMQ를 이용하여 아래 그림과 같이 Publisher가 보낸 데이터를 Consumer가 수신 하는 예제를 구현한다. RabbitMQ User 설정 설치 된 RabbitMQ 웹 페이지에 접속 한다. (ex, 192.168.0.3:15672) Admin - Add a user - Username, Password 입력 - Add user 버튼 클릭 User 등록. 예제에서는 admin/admin으로 설정 virtual hosts 권한 설정 필요 아래 그림과 같이 admin에 virtual hosts 권한을 설정 한다. pika 설치 pika : RabbitMQ/AMQP 관련 파이썬 플러그인 $ pip install pika Rabbit MQ Publisher ( publisher.py ) # Man..
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..
경쟁 소비자 패턴(Competing Consumer Pattern) 여러 소비자가 동시에 메시지 큐에 있는 메시지를 처리 할 수 있도록 하는 설계 패턴 사용량이 많은 시스템에서 요청으로 인한 병목 현상을 피하기 위해 소비자 사이에서 부하를 분산 함 다수의 메시지를 분산 처리 하기 위한 환경에 적합 수신을 위한 서비스가 여러 메시지를 동시에 처리 할 수 있도록 다수의 경쟁 소비자를 단일 채널에 생성 송신자가 메시지를 메시지 큐에 전달하면, 소비자 중에서 하나의 수신자가 메시지 수신 Consumer( consumer.py ) connection = pika.BlockingConnection(pika.URLParameters('amqp://admin:admin@192.168.0.3:5672/')) channe..
RabbitMQ Server API 이용, 연결된 Connection List 확인 하기 import requests session = requests.Session() session.auth = ("admin", "admin") json_data = session.get("http://192.168.0.40:15672/api/connections").json() for data in json_data: print(data["name"]) $ python main.py 192.168.0.210:56129 -> 192.168.48.3:5672 수신된 JSON 데이터 원문 - RabbitMQ Server에 연결된 Connection은 1개이며, { "auth_mechanism":"PLAIN", "channe..
Rabbit MQ란? RabbitMQ는 얼랭(Erlang)으로 AMQP를 구현한 메시지 브로커 시스템이다. 얼랭(Erlang) 얼랭(Erlang)은 범용 병령 프로그래밍 언어이다. 원래는 에릭슨(Ericsson)사에서 스위칭 소프트웨어에서 사용하기 위해 개발 되었지만, 1998년 오픈 소스로 공개 되었다. AMQP(Advanced Message Queuing Protocol) https://kaizen8501.tistory.com/217 참고 Ubuntu에 설치 저장소 추가 $ sudo apt list --installed rabbitmq-server Rabbit MQ 설치 $ sudo apt-get install erlang $ sudo apt-get install rabbitmq-server $ ra..