카테고리 없음

교환기(Exchange)에서 “Direct, Topic, Fanout, Headers 타입 지원” 이란? 250523

mezzanineX 2025. 5. 23. 08:18

q1: 교환기(Exchange)에서 “Direct, Topic, Fanout, Headers 타입 지원” 이란?

a1:

교환기(Exchange)에서 “Direct, Topic, Fanout, Headers 타입 지원”이라는 것은, 메시지를 라우팅(어떤 큐로 전달할지 결정)할 때 네 가지 방식 중 하나를 선택할 수 있다는 뜻입니다. 각각의 특징을 살펴보면 다음과 같습니다.



1. Direct Exchange
• 원리
메시지의 routing key(라우팅 키)와, 큐 바인딩 시 지정한 binding key(바인딩 키)가 정확히 일치할 때만 해당 큐로 메시지를 전달합니다.
• 용도
특정 큐로만 메시지를 보내고 싶을 때 사용합니다.
• 예시
• Exchange에 error라는 바인딩 키로 큐 A를 바인딩
• 메시지에 routing key=error를 붙여 보내면 → 큐 A로 전달
• routing key=info 로 보내면 → 전달되지 않음



2. Topic Exchange
• 원리
routing key를 “단어(word)” 단위로 쪼갠 뒤(.으로 구분), 바인딩 키에 와일드카드(*, #)를 이용해 패턴 매칭을 수행합니다.
• * : 정확히 한 단어와 매칭
• # : 0개 이상의 단어와 매칭
• 용도
유연한 토픽 기반 라우팅이 필요할 때 사용합니다.
• 예시
• 큐 A 바인딩 키: logs.error.*
• 큐 B 바인딩 키: logs.#
• 메시지 키 logs.error.sys → A, B 모두 수신
• 메시지 키 logs.info.db.query → B만 수신



3. Fanout Exchange
• 원리
라우팅 키를 전혀 고려하지 않고, 연결된 모든 큐로 메시지를 무조건 브로드캐스트합니다.
• 용도
모든 소비자(큐)에 동일한 메시지를 전달하고자 할 때 사용합니다. (예: 실시간 알림)
• 예시
• 큐 A, B, C가 같은 Fanout Exchange에 바인딩
• 어떤 메시지를 보내든 → A, B, C 모두 수신



4. Headers Exchange
• 원리
메시지의 헤더(Header) 속성을 기반으로 라우팅을 수행합니다.
• 바인딩 시 x-match(all 또는 any)와 함께 헤더 키/값을 지정
• all : 모든 헤더 키/값이 일치해야 라우팅
• any : 하나 이상의 헤더 키/값만 일치해도 라우팅
• 용도
메시지 페이로드와 라우팅 키 대신, 다양한 헤더 조합으로 정교한 라우팅이 필요할 때 사용합니다.
• 예시
• 큐 A 바인딩: { "x-match": "all",  "format":"pdf", "type":"report" }
• 헤더 format=pdf AND type=report 일치 시 → A로 전달
• 큐 B 바인딩: { "x-match": "any",  "format":"zip", "priority":"high" }
• 헤더 중 하나만 일치해도 → B로 전달



이 네 가지 타입을 적절히 조합하면, 메시지 브로커 상에서 매우 유연하고 세밀한 라우팅 정책을 설계할 수 있습니다.

반응형