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)
}