소개: RabbitMQ에서는 생산자가 제출한 모든 메시지가 Exchange에 의해 받아들여지고, Exchange는 특정 정책에 따라 저장을 위해 대기열로 전달합니다 RabbitMQ는 팬아웃, 다이렉트, 토픽, 헤더 네 가지 교환 유형을 제공합니다 헤더 모드는 실제로는 덜 사용되며, 이 글에서는 처음 세 가지 모드만 비교합니다.
1. 직접 교환
직접 교환으로 전송되는 모든 메시지는 RouteKey에 지정된 큐로 전달됩니다.
1. 일반적으로 rabbitMQ:"와 함께 제공되는 거래소를 사용할 수 있습니다(거래소 이름은 빈 문자열로 이하 기본 거래소라고 부릅니다).
2. 이 모드에서는 교환에 대해 어떤 결합 작업도 수행할 필요가 없습니다
3. 메시징을 위해 "RouteKey"가 필요하며, 이는 단순히 전송할 큐의 이름으로 이해할 수 있습니다.
4. RouteKey에 지정된 큐 이름이 vhost에 존재하지 않으면 메시지가 폐기됩니다.
2. 팬아웃 교환
팬아웃 교환기로 전송된 모든 메시지는 해당 교환기와 결합된 모든 큐로 전달됩니다.
1. 라우팅 테이블의 패턴으로 이해할 수 있습니다
2. 이 모드는 RouteKey가 필요하지 않습니다
3. 이 모드는 사전에 Exchange를 대기열에 바인딩해야 하며, 한 Exchange는 여러 큐를 바인딩할 수 있고, 한 큐는 여러 Exchange에 바인딩할 수 있습니다.
4. 메시지를 받은 교환이 어떤 큐에도 묶여 있지 않으면 메시지가 폐기됩니다.
3. 주제 교환
주제 교환에 전송된 모든 메시지는 RouteKey에 지정된 주제에 관심 있는 모든 큐로 전달됩니다
1. 이 패턴은 더 복잡한데, 간단히 말해 각 큐는 우려하는 주제를 가지고 있으며, 모든 메시지는 "제목"(RouteKey)을 가지며, Exchange는 해당 주제의 RouteKey와 일치할 수 있는 모든 큐에 메시지를 전달합니다.
2. 이 모드는 RouteKey가 필요하며, Exchange와 Queue를 미리 묶어둘 수 있습니다.
3. 바인딩할 때, 큐가 관심을 가지는 주제(예: "#.log.#")를 제공하여 큐가 로그와 관련된 모든 메시지를 처리함을 나타냅니다("MQ.log.error"인 RouteKey를 가진 메시지는 큐로 전달됩니다).
4. "#"는 0개 또는 여러 키워드를 의미하고, ""는 하나의 키워드를 의미합니다. 예를 들어, "로그". "log.warn"과 일치할 수는 있지만, "log.warn.timeout"과는 일치할 수 없습니다; 하지만 "log.#"는 위의 내용과 일치합니다.
5. 마찬가지로, Exchange가 RouteKey와 일치하는 큐를 찾지 못하면 이 메시지를 포기합니다.
|