yoncho`s blog
[RabbitMQ] 1. Exchange 본문
1. 속성
2. Exchange Type (4가지)
속성
Name : Exchange 이름
Type : 메시지 전달 방식
- Direct
- Fanout
- Topic
- Headers
Durability : Broker가 재시작되어도 남아있을지 여부
- durable : Broker가 재시작되어도 디스크에 저장되어 남아있음.
- transient : Broker가 재시작되면 사라짐
Auto-delete : 마지막 Queue 연결이 해제되면 삭제
Exchange Type
Type | Description | Feature |
Direct | Routing Key가 정확하게 일치하는 Queue에 전송 | Unicast |
Topic | Routing Key 패턴이 일치하는 Queue에 전송 | Multicast |
Headers | [Key:Value] 형태로 이뤄진 Header값을 기준으로 일치하는 Queue에 메시지 전송 *X-match 라는 값으로 헤더를 어떤식으로 해석 하고 매칭시킬지 결정함 x-match = all 일 때 모든 조건을 충족시켜야함 (AND) x-match = any 일 때 최소 1개의 조건만 충족시키면됨. (OR) |
Multicast |
Fanout | 해당 Exchange에 등록된 모든 Queue에 메시지 전송 | Broadcast |
Direct Exchange
Producer가 메시지를 전송할 때 설정한 Routing Key와 값이 정확히 일치하는 Queue에 전송
*하나의 Queue에 여러 Routing Key를 지정할 수 있고, 여러 Queue에 동일한 Routing Key를 지정할 수 있다.
Topic Exchange
Producer가 메시지를 전송할 때 설정한 Routing Key와 패턴이 유사한 (*Contain 속성) Queue에 전송
*예를 들어 “animal.rabbit” 이라는 Key가 설정되어왔을 때, “animal”, “animal.”, “animal.rabbit”, “rabbit” etc… 등등 으로 지정된 Queue에 전송될 수 있다
Headers Exchange
Producer가 메시지를 전송할 때 설정한 Header(key:value)와 동일한 쌍을 가지고있는 Queue에 전송
X-match 변수를 사용해 조건을 설정할 수 있음.
Key | Value | Description |
x-match | all | header의 모든 key-value 쌍 값과 정확히 일치한 쌍을 가진 Queue에만 Binding |
x-match | any | Queue의 key-value 쌍 값 중 하나라도 header의 key-value 쌍 값과 일치한 경우 Binding |
*예를 들어 {“x-match: all”, “autocrypt-vtr1” : “vehicle.t1”, “autocrypt-vtr2” : “vehicle.t2”} 라는 Header값으로 설정되어 메시지가 왔을 때, x-match가 all이기 때문에 key-value를 모두 만족하는 Queue가 있으면 Binding을 한다. 만약에 x-match가 any값이라면 key-value 쌍 2개 중 1개만 만족해도 Binding 된다.
Fanout
Exchange에 등록된 모든 Queue에 메시지를 전송한다.
Prefetch Count
하나의 Queue에 여러 Consumer가 존재할 경우, Queue는 기본적으로 라운드 로빈 방식으로 메시지를 분배한다. 이때 홀수 번에는 처리가 짧은 메시지가, 짝수 번에는 처리가 긴 메시지가 있다면 하나의 Consumer가 계속 일을 해야하는 상황이 발생할 수 있다.
이를 방지하기 위해 Prefetch Count를 1로 설정해 하나의 메시지가 처리되기 전에는 새로운 메시지를 받지 않게 되므로 작업 분산이 가능하다.
'기술, 나의 공부를 공유합니다. > MQTT' 카테고리의 다른 글
[RabbitMQ] 3. Connection & Channel (0) | 2023.06.24 |
---|---|
[RabbitMQ] 2. Queue (0) | 2023.06.24 |
[RabbitMQ] 0. RabbitMQ ? (0) | 2023.06.22 |
[Mosquitto] 3. Subscriber (0) | 2023.06.22 |
[Mosquitto] 2. Publisher (0) | 2023.06.22 |