yoncho`s blog
[RabbitMQ] 3. Connection & Channel 본문
Consumer Application에서 Broker로 많은 Connection (TCP 연결)을 맺는 것은 좋지 않다.
RabbitMQ에서는 Channel 이라는 개념을 통해 하나의 TCP 연결을 공유해서 사용할 수 있는 기능을 제공한다.
단, 멀티 스레드 혹은 멀티 프로세스 사용하는 작업은 각각 별도의 Channel을 열어 사용하는게 좋다.
Connection
간략 설명 :
Client (Pub/Sub)은 RabbitMQ(Host)와 단일 TCP 연결을 함.
이걸 Connection이라고 부름.
- Feature
Client(Pub/Sub)과 RabbitMQ가 연결될 때, 정확히는 RabbitMQ에서 지원하는 프로토콜은 모두 TCP 기반이다.
일반적인 Connection 특징 | AMQP 0-9-1 Connection 특징 |
하나의 Client 연결은 단일 TCP 연결을 한다. 연결을 오래 지속함. 연결을 오래 지속하기 위해 구독 등록, 메시지 Pub/Sub이 이뤄짐. 연결이 더 이상 필요 없을 시 리소스 낭비를 막고자 Close action을 취해야함. |
단일 TCP 연결을 통해 다중화 연결 방법 제공(*Channel) 단일 연결에서 Channel을 통해 여러 경량 연결을 할 수 있음. AMQP 0-9-1 버전 프로토콜 사용 Client는 단일 TCP 연결 후 하나 이상의 Channel을 통해 메시지 Pub/Sub/Management 가 |
- Life Cycle
일반적인 Connection Life Cycle | AMQP 0-9-1 Connection Life Cycle |
|
|
Channel
간략 설명 :
Client가 Broker와 성공적으로 Connection 했으면 Channel을 통해 Client 작업을 진행함.
여기서 Connection은 단일 연결인 반면 Channel은 여러 논리 연결이 가능함.
*CAN BUS가 Message Bus 형태인 것 처럼 RabbitMQ 또한 Message Bus 형태이므로 유사하게 생각하면 됨.
- Feature
AMQP 0-9-1 버전 프로토콜에서 Connection을 사용해야 Channel을 사용할 수 있음.
보통 RabbitMQ는 AMQP 0-9-1 버전 프로토콜을 지원하기 때문에 별 문제 없이 사용할 수 있음.
Channel 특징 |
단일 TCP 연결을 공유해 다중 경량 연결함. Client가 수행하는 모든 프로토콜 작업은 Channel에서 발생. Channel 안에서 연결할 Queue 선언 및 Channel 하나당 하나의 Queue만 선언이 가능 Channel들은 서로 분리되어있기 때문에 각 Channel 별 고유 식별 ID를 포함해 Broker에게 전달함. 고유식별 ID를 통해 Client, Broker 모두 해당 ID의 Channel을 파악할 수 있음. Channel은 Connection Context에 존재하기에 Connection이 닫히면 Channel들 또한 닫힌다. Client에서 멀티 스레드/프로세스를 사용해야 한다면 스레드/프로세스 별로 Channel을 열고 사용하는게 일반적이며 이때 Channel간 공유는 이뤄지지않는다. |
- Life Cycle
Channel Life Cycle |
Open
|
Close
|
Connection과 Channel 관계
- Connection은 물리적 연결
- Connection은 단일 TCP 연결만 가능
- AMQP 0-9-1 버전 프로토콜 사용하는 Connection의 경우 Channel이라는 경량 연결 포함
- Channel은 Connection Context 공유, 하나 이상의 경량 연결 가능
- Channel 하나당 하나의 Queue만 연결 가능
- Connection 닫힐 시 Connection 안에 정의된 모든 Channel도 같이 닫힘
Sample Code
//추후 작업 예정
참고 :
https://hyos-dev-log.tistory.com/8
https://www.rabbitmq.com/connections.html
https://www.rabbitmq.com/channels.html
https://sharmilas.medium.com/get-started-with-rabbitmq-in-node-js-1adb18d019d0
'기술, 나의 공부를 공유합니다. > MQTT' 카테고리의 다른 글
[RabbitMQ] 5. RabbitMQ Broker ShutDown 대비 (0) | 2023.06.24 |
---|---|
[RabbitMQ] 4. Clustering & Mirroring (0) | 2023.06.24 |
[RabbitMQ] 2. Queue (0) | 2023.06.24 |
[RabbitMQ] 1. Exchange (0) | 2023.06.24 |
[RabbitMQ] 0. RabbitMQ ? (0) | 2023.06.22 |