프로그래밍/RabbitMQ 11

[RabbitMQ] 스트림

RabbitMQ Stream https://github.com/rabbitmq/rabbitmq-stream-dotnet-client docs : https://rabbitmq.github.io/rabbitmq-stream-dotnet-client/stable/htmlsingle/index.html RabbitMQ Stream .Net Client는 RabbitMQ Stream Plugin과 통신하기 위한 .Net 라이브러리입니다. Stream 장점 Large fan-outs 여러 애플리케이션이 동일한 메시지를 읽어야 할 때 유용합니다. 기존의 큐를 사용하면 각 애플리케이션마다 큐를 선언하고 각각에게 동일한 메시지의 복사본을 전달해야 합니다. Stream은 여러 소비자가 동일한 큐에서 동일한 메시지를 비파..

[RabbitMQ] 클러스터 구성하기 - Linux

RabbitMQ 클러스터 구축하기 - Linux 1. RabbitMQ 설치 모든 노드에 RabbitMQ, Erlang을 설치합니다. 2. RabbitMQ 서버 구성 각 노드의 RabbitMQ 서버 구성을 위해 해당 노드에 접속합니다. rabbitmq.config 파일을 열고 노드 이름, Erlang Cookie 및 클러스터링 구성을 추가합니다. Docker Images mirero@ADC40-TEST-03:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE rabbitmq 3-management 87d31604e8cf 5 weeks ago 275MB Docker Container 실행 (RabbitMQ 서버 시작) Node 3개 구성합니다. 각 Node는 ho..

[RabbitMQ] 미러링

RabbitMQ 미러링 RabbitMQ Mirroring은 RabbitMQ Cluster 안에서 Meesage를 다수의 RabbitMQ에 복사하여 저장하는 기법입니다. Master Queue는 원본 Queue를 의미하며 Slave Queue는 Master Queue를 복제한 Queue를 의미합니다. 각 Master Queue마다 다른 개수의 Slave Queue를 설정 할 수 있습니다. Master Queue와 Slave Queue 사이의 Mirroring은 기본적으로 Sync 방식입니다. ex> Producer가 Mirroring된 Queue에게 Message를 전송하면, 받은 Message를 Master Queue에만 넣은 후, 모든 Slave Queue와 Mirroring이 완료된 후에야 Produ..

[RabbitMQ] 클러스터링

RabbitMQ 클러스터링 RabbitMQ Clustering은 다수의 RabbitMQ를 하나의 RabbitMQ처럼 묶어서 사용하는 방식입니다. Clustering은 Queue를 제외한 모든 정보를 공유하기 때문에 메시지가 담겨있는 Queue에 대한 보호 장치라고 보면 됩니다. 특징 RabbitMQ Cluster을 구성하는 RabbitMQ는 Queue를 제외한 모든 정보를 공유합니다. 따라서 동일한 Cluster안에 있는 모든 RabbitMQ는 동일한 Exchange를 갖고 있습니다. RabbitMQ Cluster에서 기본적으로 Queue는 한개만 존재합니다. 위 그림을 보면 Queue A와 Queue B는 하나만 존재하는 것을 확인할 수 있습니다. 동일 Cluster안의 있는 모든 RabbitMQ는 E..

[RabbitMQ] 성능 향상 위한 가이드

RabbitMQ 성능 향상을 위한 가이드 Queues 큐에 쌓여있는 메시지는 적어야한다 큐에 있는 많은 메시지는 RAM 사용에 많은 부하를 줄 수 있습니다. RAM을 확보하기 위해 RabbitMQ는 메시지를 디스크로 플러시(페이지 아웃)하기 시작합니다. 페이지 아웃 프로세스는 일반적으로 시간이 걸리고 페이지 아웃할 메시지가 많을 때 큐가 메시지를 처리하지 못하도록 차단하여 큐잉 속도를 저하시킵니다. 큐에 메시지가 많으면 브로커의 성능에 부정적인 영향을 미칠 수 있습니다. 예측 가능한 성능을 얻기 위해서 Lazy Queue를 활성화하라 Lazy queue는 메시지가 자동으로 디스크에 저장되어 RAM 사용을 최소화하지만 처리 시간을 연장하는 큐입니다. 한 번에 많은 메시지를 보내거나(예: 배치 작업 처리),..

[RabbitMQ] 메시지 송수신 - RoutingKey

RabbitMQ 이전 게시물에서 Pub/Sub 메시지 송수신은, 메시지를 모든 Consumer에게 Broadcast하는 방법이였습니다. RabbitMQ에서 RoutingKey를 이용해서 특정 Queue에서만 메시지를 송수신 할 수 있습니다. 메시지 송신/수신 - RoutingKey RoutingKey를 이용하면 메시지를 필터링할 수 있습니다. 메시지는 바인딩 키가 일치하는 Queue로 송신합니다. RoutingKey를 이용하기 위한 Binding 기존에 사용하던 Exchange가 선언 된 경우 오류가 발생할 수 있습니다. Exchange를 삭제해줘야합니다. Exchange 설정 // Error 발생 시 Exchange 삭제 //channel.ExchangeDelete(exchangeName, true);..

[RabbitMQ] 메시지 송수신 - Publish/Subscribe

이전 포스팅 : 메시지 송신/수신 - WorkQueue RabbitMQ 메시지 송신/수신 - Publish/Subscribe Publisher가 생성된 2개의 Queue에 메시지를 송신하면, 각 Queue를 구독중인 2개의 Consumer는 동일한 메시지를 수신합니다. Exchange RabbitMQ의 핵심 아이디어는 Producer가 메시지를 Queue에 직접 보내지 않는다는 것입니다. Producer와 Consumer 중간에서 Exchange가 메시지를 수신하고, Queue에 메시지는 송신해줍니다. Exchange를 정의할 때 메시지를 어떻게 처리해야하는지 알아야합니다. Exchange의 메시지 처리 방식 4가지 direct topic headers fanout fanout 여기선 fanout방식에 ..

[RabbitMQ] 파일 송수신 (이미지 송수신)

이전 포스팅 [RabbitMQ] 메시지 송신/수신하기 사실, MessageQueue로 파일을 송/수신 하는것 자체가 목적에 맞지 않습니다. MessageBrocker는 말 그대로 Message만 송/수신 해야합니다. 이번 게시물에서 사이즈가 큰 파일을 메시지에 담아 송/수신 하는 방법을 확인하고, 사이즈가 큰 파일을 메시지에 담아 보낼 때, FTP와 비교하여 속도가 얼마나 차이가 나는지 테스트해봤습니다. 파일 송/수신 publisher msg 송신 시 Byte로 변환 후 message body에 담아 송신합니다. string ImagePath = @"C:\Users\Desktop\testfile\test.tif"; byte[] imageArray = File.ReadAllBytes(ImagePath); ..

[RabbitMQ] 메시지 송수신 - Helloworld

메시지 송/수신 RabbitMQ Publisher, RabbitMQ Consumer 2개 솔루션 생성해야합니다. Publisher : 메시지 발행 Consumer : 메시지 수신 RabbitMQ.Client nugetpackage 설치합니다. v6.5.0 RabbitMQ-Publisher ConnectionFactory 클래스의 인스턴스 생성 : RabbitMQ 서버 접속을 위한 로그인 정보를 설정합니다. QueueDeclare 메소드를 사용하여 "hello"라는 큐를 선언합니다. BasicPublish 메소드를 사용하여 메시지를 전송합니다. exchange: 브로커에서 사용하는 exchange를 지정합니다. 여기에서는 빈 문자열을 지정하여 디폴트 exchange를 사용합니다. routingKey: 전송..

[RabbitMQ] Docker이용하여 RabbitMQ 설치 - Linux

Docker이용한 RabbitMQ 설치 - Linux Ubuntu 16.04서버에서 Docker를 활용해서 RabbitMQ 환경을 구축합니다.RabbitMQ DockerHub https://hub.docker.com/_/rabbitmq Docker Image 다운로드 docker login docker pull rabbitmq:3-management (= v3.11) 관리 기능이 있는 RabbitMQ 이미지를 사용하려면 rabbitmq:3-management 태그를 사용해야합니다. 이 경우 웹 브라우저에서 http://localhost:15672 이동하여 RabbitMQ 관리 UI에 액세스 할 수 있습니다. docker images 확인 administrator@TEST:~$ docker images R..