Golang RabbitMQ 라우팅 패턴

RabbitMQ의 라우팅 패턴은 발행-구독 패턴을 기반으로 한 교환 라우팅 방법을 확장합니다. 라우팅 패턴을 위한 교환 유형은 다이렉트로, 이는 RabbitMQ의 기본 교환 유형입니다. 이전 섹션에서는 명시적인 교환을 사용하지 않았지만, 실제로 사용된 기본 교환은 다이렉트 교환이었습니다.

팁: 라우팅 패턴 규칙에 익숙하지 않다면 RabbitMQ 라우팅 패턴을(를) 읽어보세요.

1. 준비 작업 자습서

먼저 Golang RabbitMQ 발행-구독 패턴 장을 읽어주세요. 기본적으로 RabbitMQ의 다양한 작업 모드는 다양한 유형의 교환으로 구현됩니다. 코드는 거의 동일하며, 주된 차이점은 교환의 정의입니다. 따라서 발행-구독 패턴을 이해하면 다른 패턴은 매우 간단합니다.

2. 다이렉트 교환 선언

err = ch.ExchangeDeclare(
  "tizi365_direct", // 교환 이름, 고유해야 함
  "direct",         // 교환 유형
  true,             // 지속적
  false,            // 자동 삭제
  false,            // 내부적
  false,            // 노-웨이트
  nil,              // 인수
)

3. 메시지 전송

	// 메시지 내용
	body := "안녕하세요 Tizi365.com!"

	// 메시지 전송
	err = ch.Publish(
		"tizi365_direct",     // 교환 (교환 이름)
		"blog",               // 라우팅 키, 메시지를 보낼 대상 큐를 결정하는 중요한 매개변수
		false,                // 필수
		false,                // 즉시
		amqp.Publishing {
			ContentType: "text/plain",   // 메시지 컨텐츠 유형, 이 경우 평문
			Body:        []byte(body),    // 메시지 내용
		})

4. 소비자가 메시지 수신

4.1. 교환 바인딩

// 조작할 큐 선언
q, err := ch.QueueDeclare(
  "",     // 큐 이름, 지정하지 않으면 임의로 생성됨
  false,  // 지속적인 큐
  false,  // 사용되지 않을 때 삭제
  true,   // 배타적
  false,  // 노-웨이트
  nil,    // 인수
)

// 지정된 교환에 대한 큐 바인딩
err = ch.QueueBind(
  q.Name,             // 큐 이름
  "blog",             // 라우팅 키, 메시지 전송 시 지정한 라우팅 매개변수와 일치하면 현재 큐로 메시지 전달
  "tizi365_direct",   // 교환 이름, 메시지 발송자 측에서 정의한 교환과 일치해야 함
  false,
  nil)

4.2. 메시지 소비

// 소비자 생성
msgs, err := ch.Consume(
  q.Name, // 이전의 큐 이름에 대한 참조
  "",     // 소비자 이름, 지정하지 않으면 임의로 생성됨
  true,   // 큐가 처리한 메시지를 자동으로 승인
  false,  // 배타적
  false,  // 로컬-노치
  false,  // 노-웨이트
  nil,    // 인수
)

// 큐에서 메시지 소비를 반복
for d := range msgs {
  log.Printf("받은 메시지=%s", d.Body)
}