라비트MQ 라우팅 패턴은 기본적으로 발행/구독 패턴과 동일합니다. 차이점은 발행/구독 패턴이 메시지를 모든 바인딩된 대기열로 전달하는 반면 라우팅 패턴은 라우팅 일치에 따라 메시지를 대기열로 전달합니다.

구체적인 코딩 관점에서 라우팅 패턴과 발행/구독 패턴의 차이는 사용된 교환 타입에 있습니다. 라우팅 패턴은 직접(Direct) 타입을 사용합니다.

구조 다이어그램

Direct Pattern

설명:

  • P는 프로듀서를 나타내며, C1과 C2는 컨슈머를 나타냅니다. 빨간 상자는 대기열을 나타내고, X는 교환을 나타냅니다.
  • 교환 타입은 직접(Direct)입니다.
  • 직접 교환 메시지 전달 로직: 메시지의 라우팅 키를 이 교환의 모든 바인딩에 연결된 라우팅 키와 비교합니다. 같으면 해당 바인딩에 대응하는 대기열로 메시지가 전송됩니다.

예를 들어, 위 다이어그램에서: 대기열 Q1의 라우팅 키는 orange이고, 대기열 Q2의 라우팅 키는 black과 green입니다. 메시지를 전송할 때, 메시지의 라우팅 키가 orange이면 Q1로 전달되고, 라우팅 키가 black이나 green이면 Q2로 전달됩니다.

사용 사례

라우팅 패턴은 발행/구독 패턴의 확장이므로 사용 사례는 발행/구독 패턴과 유사하지만 메시지 구독 조건을 설정할 수 있는 차이가 있습니다.

예를 들어: 전자 상거래 웹사이트에서 동중국, 남중국, 북중국 및 남서중국에 각각 웨어하우스 관리 시스템이 배치되어 있는 네 개의 창고가 있습니다. 사용자가 주문을 하면 가장 가까운 창고가 배송을 담당합니다.

사용자가 주문을 하고 주문 메시지가 생성되면 해당 지역의 워하우스 관리 시스템으로 메시지를 전달하고 싶은데, 이는 라우팅 패턴을 사용하여 구현할 수 있습니다.

네 개의 창고 관리 시스템의 배송 대기열에 대한 라우팅 키 바인딩은 다음과 같습니다:

  • 동중국 = east
  • 북중국 = north
  • 남중국 = south
  • 남서중국 = west

사용자가 주문을 한 후 사용자의 주소가 속한 지역을 결정하고, 라우팅 키를 계산하여 해당 지역의 주문 메시지를 보냅니다. RabbitMQ 직접 교환은 이를 해당 대기열로 전달합니다.