全部產品
Search
文件中心

ApsaraMQ for RabbitMQ:Connection和Channel

更新時間:Jun 30, 2024

本文介紹雲訊息佇列 RabbitMQ 版中Connection和Channel的概念及其使用建議。

Connection

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

dg_connection

Channel

Channel是物理TCP串連中的虛擬串連。當應用通過Connection與雲訊息佇列 RabbitMQ 版建立串連後,所有的AMQP協議操作(例如建立隊列、發送訊息、接收訊息等)都會通過Connection中的Channel完成。Channel可以複用Connection,即一個Connection下可以建立多個Channel。Channel不能脫離Connection獨立存在,而必須存活在Connection中。當某個Connection斷開時,該Connection下的所有Channel都會斷開。當大量應用需要與雲訊息佇列 RabbitMQ 版建立多個串連時,建議您使用Channel來複用Connection,從而減少網路資源和雲訊息佇列 RabbitMQ 版資源消耗。

dg_channel

使用建議

  • 保持Connection長串連,請勿頻繁開啟或關閉Connection。如果確實需要頻繁開啟或關閉串連,請使用Channel。單一實例開啟Connection或Channel的介面限制,請參見使用限制

  • Connection數量較少而消費的資料量較大時,可能會出現消費傾斜問題,您可以在保證每個消費者Connection數一致的同時,增加每個消費者的Connection數或增加消費者數量。建議所有消費者的Connection之和大於30。

  • 多個進程可以共用同一個Connection,共用時請不要頻繁建立和關閉Connection,否則可能會出現ChannelNotFind錯誤。

  • Producer和Consumer分別使用不同的Connection進行訊息發送和消費。