이전 포스팅 : 메시지 송신/수신 - 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방식에 대해 알아봅시다.
- fanout은 수신한 모든 메시지를 모든 Queue에 브로드캐스트합니다.
Exchange 선언 시 fanout 설정
var exchangeName = "exchange"
channel.ExchangeDeclare(exchangeName, ExchangeType.Fanout);
publish 설정
var message = GetMessage(args);
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: exchangeName,
routingKey: string.Empty,
basicProperties: null,
body: body);
Binding
- Exchange와 Queue 간의 관계를 Binding이라고 합니다.
- Binding을 맺어줘야 Exchange가 Queue에 메시지를 보낼 수 있습니다.
- 아래와 같이 Exchange 1개에 Queue 2개를 bind할 수 있습니다.
Queue Binding 설정
- Queue2를 추가로 바인딩할 수 있다.
// binding queue1
var queueName1 = "queue1";
channel.QueueBind(queue: queueName1,
exchange: exchangeName,
routingKey: string.Empty);
// binding queue2 (MultiBinding)
var queueName2 = "queue2";
channel.QueueBind(queue: queueName2,
exchange: exchangeName,
routingKey: string.Empty);
Temp Queue
- 익명의 Temp Queue를 생성할 수도 있습니다.
Temp Queue 선언
var queueName = channel.QueueDeclare().QueueName;
C# RabbitMQ - Pub/Sub 샘플
- 기본적으로 RabbitMQ 서버가 실행됐다는 전제하에 실행해야합니다.
- RabbitMQ Config는 사용자 환경에 맞게 설정해야합니다.
- pub, sub1, sub2 모두 실행시켜줘야 합니다.
'프로그래밍 > RabbitMQ' 카테고리의 다른 글
[RabbitMQ] 성능 향상 위한 가이드 (0) | 2023.04.28 |
---|---|
[RabbitMQ] 메시지 송수신 - RoutingKey (0) | 2023.04.19 |
[RabbitMQ] 파일 송수신 (이미지 송수신) (0) | 2023.03.30 |
[RabbitMQ] 메시지 송수신 - Helloworld (0) | 2023.03.30 |
[RabbitMQ] Docker이용하여 RabbitMQ 설치 - Linux (0) | 2023.03.29 |