[RabbitMQ] 원격 프로시저 호출 (RPC)(using the Bunny client) 두 번째 강의에서 여러 worker들 사이에서 시간이 소요되는 작업을 분배하는 Work Queue에 관해서 배웠습니다. 하지만 만약 원격지의 함수를 실행시키고 해당 결과를 기다리는 경우에는 어떨까요? 이 경우는 약간 다른 경우입니다. 흔히 보통 이런 경우를 원격 프로시저 호출 또는 RPC(Remote Procedure Call)라고 알려져 있습니다. 이번 강의에서 RabbitMQ를 RPC 시스템을 구축하는데 사용해볼 것 입니다: 클라이언트와 확장가능한 RPC 서버로 구성됩니다. 실제의 시간이 소요되는 작업이 없기 때문에 피보나치 수열을 반환하는 가짜 RPC 서비스를 제작해볼 것 입니다. 전제조건이 튜토리얼에서 R..
[RabbitMQ] Topics(using the Bunny client) 이전 강의에서 우리의 로그 시스템을 발전 시켜봤습니다. 단순히 브로드캐스팅을 하는 fanout exchange 대신에 direct 를 이용하여 메시지 로그를 선택적으로 수신할 수 있게 해보았습니다. 비록 direct exchange를 사용하여 우리의 시스템을 진보시켜보았지만 여전히 다중 기준에 의한 라우팅을 할 수 없는 한계가 존재합니다. 우리의 로그 시스템은 info, warning, error 와 같은 규칙에 분류한 구독을 할 수 있지만 로그를 출력하는 프로그램에 따른 구독은 할 수 없습니다. 유닉스의 syslog 툴의 개념을 생각하면 됩니다. syslog는 규칙(info/warn/cri..)와 출처(auth/cron/kern..
[RabbitMQ] Routing(using the Bunny client) 이전 강의에서 간단한 로그 시스템을 만들어봤습니다. 로그 메시지들을 여러 receiver들에게 브로드캐스트할 수 있었습니다. 이번 강의에서는 메시지의 일부를 수신할 수 있게 해볼 것 입니다. 예를들어, 콘솔에 전체 로그 메시지들을 출력하는 동안 치명적인 에러 메시지들은 디스크 공간에 저장될 수 있게 로그 파일에 기록하게 할 수 있습니다. 전제조건 이 튜토리얼에서 RabbitMQ가 localhost에 설치되어있고 기본 포트인 5672로 동작 중인 것을 가정으로 진행됩니다. 다른 호스트나, 포트를 사용할 경우 적절한 세팅을 하셔야합니다. Bindings이전 예제에서 bindings을 이미 만들었습니다. 다음 코드와 같습니다.q.bi..
[RabbitMQ] Publish/Subscribe(using the Bunny Client) 이전 강의에서 work queue 를 만들어봤습니다. work queue 의 내부에서는 각 작업을 정확히 하나씩의 worker 에게 전달해줍니다. 이번 강의에서는 work queue와는 전혀 다른 하나의 메시지를 여러 consumer들에게 전송해볼 것 입니다. 이 패턴은 publish/subscribe 이라 불립니다. 이 패턴을 구현하기 위해 간단한 로그 시스템을 만들 것 입니다. 2개의 프로그램으로 구성되며, 첫 번째 프로그램은 로그 메시지를 생성하고 두 번째는 로그를 받아 출력합니다. 제작할 로그 시스템은 동작 중인 receiver 프로그램이 받는 모든 메시지들을 복사합니다. 이 경우 한 receiver 프..
Work Queues (using Bunny) 첫번째 강의에서 queue로 송/수신하는 프로그램을 작성했습니다. 이번 강의에서는 여러 작업 프로세스들 사이에서 일정 시간이 소모되는 작업들을 분배하는 Work Queue 를 만들것 입니다. Work Queue(Task Queues 라 불리는)의 핵심 개념은 자원소모가 많은 작업을 즉시 처리하지 않고 작업이 완료될 때까지 기다리는 것입니다. 대신 이 작업이 나중에 처리되어지도록 스케쥴해야합니다. 작업을 메시지로 캡슐화하여 queue에 전송할 것입니다. 작업 프로세스는 백그라운드로 실행되면서 작업을 queue로 부터 꺼내 수행합니다. 여러 작업 프로세스들을 실행시킬 경우 작업들은 프로세스들 사이에서 분배되어 실행될 것입니다. 이 개념은 웹 어플리케이션에서 복잡..
RabbitMQ란? RabbitMQ는 AMQP 프로토콜을 구현한 메시지 브로커입니다. producers 로부터 메시지들을 받아 consumers 에게 전달해주는 서비스로, 쉽게말해 시스템 간에 메시지를 전달해주는 서비스입니다. RabbitMQ는 사용자가 설정한 규칙에 따라 메시지들을 route, buffer, persist 할 수 있습니다. 일반적으로 메시징 시스템이나 RabbitMQ 에서 사용하는 컴퓨터 용어를 살펴보겠습니다. Producing 은 메시지를 전송한다는 의미입니다. 메시지들을 전송하는 프로그램을 producer 라 부릅니다. 앞으로 producer를 P 라고 나타내겠습니다. Queue는 mailbox를 의미하며 RabbitMQ 시스템 내에 위치하게 됩니다. 메시지들은 RabbitMQ를 통..