본문 바로가기
728x90

오픈소스/RabbitMQ6

[RMQ] Python으로 배우는 RabbitMQ 튜토리얼(6) - RPC 1. RPC란? RPC는 Remote Procedure Call의 약자로 간단하게 Client는 Request를 Server에 전달하고 Server는 해당 Request를 처리하여 알맞은 결과 값을 다시 Client에 Response해주는 방법을 뜻한다. 즉, RPC는 원격지에 메세지를 전달해서 결과를 다시 전달 받는 것을 뜻한다. 1-1. Message Properties DeliveryMode : 메세지 속성이 persistent인지 transient인지 표시(휘발성 or 비휘발성) ContentType : 내용물의 mime-type ReplyTo : 일반적으로 callback queue의 이름을 지정하는데 사용 CorrelationID: 요청을 구분할 수 잇는 유일한 값 1-2. 아래는 RPC의 데.. 2022. 1. 20.
[RMQ] Python으로 배우는 RabbitMQ 튜토리얼(5) - Topic 1. Topic이란 RabbitMQ에서 토픽이란 routing_key 전체가 일치하거나 일부 패턴과 일치하는 모든 Queue에 메세지를 전달하는 역할을 한다. 위와 같이 어떤 토픽이냐에 따라 해당 토픽에 관심이 있는 Consumer에게 메세지를 선별적으로 보내게 된다. 이때 토픽에서 와일드 카드 기능을 제공하게 되는데, 1. *(star) : 한 단어만을 지정 가능 2. #(hash) : 한 단어 이상을 지정 가능 예를 들어, *.orange.* 의 경우 a.orange.b 형식으로 매칭되고, a.b.orange의 경우에는 매칭되지 않는다. 또한 lazy.#의 경우, lazy.aa.bb 혹은 lazy.cc.dd 혹은 lazy.abcd.efghi 모두와 매칭 된다. 토픽의 장점은 임의의 라우팅 키를 가질 .. 2022. 1. 20.
[RMQ] Python으로 배우는 RabbitMQ 튜토리얼(4) - Routing Routing의 경우 Pub/Sub 구조와 함께 사용하는 기능으로, 기존 튜토리얼(3)에서 Pub/Sub의 경우에는 단순히 메세지를 모든 Subscriber에게 전송했다면, Routing 기능을 통해 특정 Subscriber에게 특정 메세지를 보내는 역할을 한다. 예를 들어, 앞선 예제의 로깅 시스템에서 Disk Logging 프로그램은 Disk의 용량 절약을 목적으로 Critical한 에러 메세지만 수신하여 파일로 떨구고 싶은 경우에 Routing 기능을 사용할 수 있다. 1. Binding 이때 사용하는 옵션이 routing_key 옵션으로 바인딩 키를 설정한다. channel.queue_bind(exchange=exchange_name, queue=queue_name, routing_key='bla.. 2022. 1. 18.
[RMQ] Python으로 배우는 RabbitMQ 튜토리얼(3) - Publish/Subscribe 이전과 동일하게 Pika Python Client를 사용한다. 이전 글(Python으로 배우는 RabbitMQ 튜토리얼(2) - Work Queue)에서는 작업 대기열(Work Queue)를 실습했다. Work Queue의 경우에는 정확히 한 작업자(Worker)에게 메세지를 전달하는 것이었다면 이번 글에서 배울 Publish/Subscribe의 경우에는 특정 토픽을 구독하는 여러 Consumer에게 메세지를 전달하는 방식이다. 여기에 동작 방식을 잘 설명하기 위해 간단한 로깅 시스템을 추가로 구축할 예정이다. 아래의 예시는 하나의 프로그램에서 Log 메세지를 전송하면, Disk에 Log를 기록하는 프로그램과 화면에 Log를 출력하는 프로그램이 각각 메세지를 수신한다. 1. 교환(Exchanges) 이전.. 2022. 1. 12.
[RMQ] Python으로 배우는 RabbitMQ 튜토리얼(2) - Work Queue - Pika Python Client 사용 - 필수조건 : pika RabbitMQ Client 버전 1.0.0. - RabbitMQ 5672 port process running 첫번째 실습에서 명명된 큐에 메세지를 보내고 받는 프로그램을 만들었다면, 이번 글에서는 시간이 오래 걸리는 작업에 사용하거나 여러 작업자에게 분산하는데 사용할 작업 대기열(Work Queue)에 대해서 배워보려고 한다. (시간이 걸리는 작업을 구현하기 위해 time.sleep()함수를 사용하여 처리할 예정이다.) 작업대기열(Work Queue)의 장점은 작업을 병렬로 처리할 수 있다는 점이다. 먼저 두 개의 worker.py 스크립트를 실행하여 메세지를 처리할 Consumer(worker)를 2개 생성한다. 튜토리얼(1)의 p.. 2022. 1. 12.
[RMQ] Python으로 배우는 RabbitMQ 튜토리얼(1) - Hello World RabbitMQ는 메세징큐 기능을 수행하는 오픈소스이다. 카프카와 동일한 기능을 제공하는 오픈소스 제품이다. 이번 글에서는 Docker로 RabbitMQ 이미지를 다운받아 실행하여 RabbitMQ에 나와있는 튜토리얼들을 수행해보려고 한다. https://www.rabbitmq.com/getstarted.html 여러 언어 중에 Python을 선택해 보았다. 1. 사전 준비 사항 우선 위 실습을 따라하려면 사전에 RabbitMQ가 5672 포트로 설치되어야 한다. 나 같은 경우는 Oracle Linux 장비에 Docker로 RabbitMQ를 실행하였다. 1-1. Docker로 RabbitMQ 다운받아 백그라운드로 실행 root@master:~# docker run -it --rm -d --name rabb.. 2022. 1. 11.
728x90