프로그래밍/RabbitMQ

[RabbitMQ] 메시지 송수신 - RoutingKey

Victory_HA 2023. 4. 19. 17:45

RabbitMQ

  • 이전 게시물에서 Pub/Sub 메시지 송수신은,
  • 메시지를 모든 Consumer에게 Broadcast하는 방법이였습니다.
  • RabbitMQ에서 RoutingKey를 이용해서 특정 Queue에서만 메시지를 송수신 할 수 있습니다.

메시지 송신/수신 - RoutingKey

  • RoutingKey를 이용하면 메시지를 필터링할 수 있습니다.
  • 메시지는 바인딩 키가 일치하는 Queue로 송신합니다.

RoutingKey를 이용하기 위한 Binding

  • 기존에 사용하던 Exchange가 선언 된 경우 오류가 발생할 수 있습니다.
    • Exchange를 삭제해줘야합니다.

Exchange 설정

// Error 발생 시 Exchange 삭제
//channel.ExchangeDelete(exchangeName, true);
var ex_type = ExchangeType.Direct;
channel.ExchangeDeclare(
                exchange: exchangeName,
                type: ex_type
                );

Queue Binding설정

  • Queue2를 추가로 바인딩할 수 있다.
// Binding1
channel.QueueBind(
    queue: qName,
    exchange: exchangeName,
    routingKey: "black"
    );

// Binding2 (MultiBinding)
channel.QueueBind(
    queue: qName2,
    exchange: exchangeName,
    routingKey: "orange"
    );

Publish 설정

  • 각 routingkey와 매칭되는 Queue에 메시지를 송신할 수 있습니다.
channel.BasicPublish(
    exchange: exchangeName,
    routingKey: "black",
    basicProperties: null,
    body: Encoding.UTF8.GetBytes($"{DateTime.Now}"));

channel.BasicPublish(
    exchange: exchangeName,
    routingKey: "orange",
    basicProperties: null,
    body: Encoding.UTF8.GetBytes($"{DateTime.Now}"));

C# RabbitMQ - RoutingKey 샘플

  • 기본적으로 RabbitMQ 서버가 실행됐다는 전제하에 실행해야합니다.
  • RabbitMQ Config는 사용자 환경에 맞게 설정해야합니다.
  • pub, sub1, sub2 모두 실행시켜줘야 합니다.

rabbitMQ_RoutingKey.zip
1.25MB