本文介紹雲訊息佇列 RabbitMQ 版中Connection和Channel的概念及其使用建議。
Connection
Connection是物理TCP串連。Connection將應用與雲訊息佇列 RabbitMQ 版串連在一起。Connection會執行認證、IP解析、路由等底層網路任務。應用與雲訊息佇列 RabbitMQ 版完成Connection建立大約需要15個TCP報文互動,因而會消耗大量的網路資源和雲訊息佇列 RabbitMQ 版資源。大量的Connection會對雲訊息佇列 RabbitMQ 版造成巨大壓力,甚至觸發雲訊息佇列 RabbitMQ 版SYN洪水攻擊防護,導致雲訊息佇列 RabbitMQ 版無響應,進而影響您的業務。

Channel
Channel是物理TCP串連中的虛擬串連。當應用通過Connection與雲訊息佇列 RabbitMQ 版建立串連後,所有的AMQP協議操作(例如建立隊列、發送訊息、接收訊息等)都會通過Connection中的Channel完成。Channel可以複用Connection,即一個Connection下可以建立多個Channel。Channel不能脫離Connection獨立存在,而必須存活在Connection中。當某個Connection斷開時,該Connection下的所有Channel都會斷開。如果用戶端應用程式需要與雲訊息佇列 RabbitMQ 版進行大量的訊息發送和接收,那麼可以根據業務需要建立適當數量的Connection,並通過在每個Connection中複用多個Channel以減少系統資源的佔用。

使用建議
保持Connection長串連,請勿頻繁開啟或關閉Connection。如果確實需要頻繁開啟或關閉串連,請在保持適當數量Connection的情況下,複用多個Channel。單一實例開啟Connection或Channel的介面限制,請參見使用限制。
Connection數量較少而消費的資料量較大時,可能會出現消費傾斜問題,您可以在保證每個消費者Connection數一致的同時,增加每個消費者的Connection數或增加消費者數量。建議所有消費者的Connection之和大於30。
多個線程可以共用同一個Connection,共用時請不要頻繁建立和關閉Connection,否則可能會出現
ChannelNotFind錯誤。Producer和Consumer分別使用不同的Connection進行訊息發送和消費。