1. 程式人生 > >RabbitMQ的生產者與消費者

RabbitMQ的生產者與消費者

  生產者建立訊息,然後釋出到RabbitMQ中。訊息包含兩部分內容(有效載荷和標籤),有效載荷就是你想要傳輸的資料,它可以是任何內容,RabbitMQ不會在意這些;標籤則用來描述有效載荷,並且RabbitMQ用它來決定誰將獲得訊息的拷貝。

  消費者接收訊息,它只能得到訊息的一部分(有效載荷),訊息的標籤並不會隨有效載荷一同傳遞。RabbitMQ不會告訴消費者是誰生產的訊息,如果需要明確知道是誰生產AMQP訊息的話,就要看生產者是否把傳送方資訊放入有效載荷中。

  整個過程其實很簡單:生產者建立訊息,消費者接收訊息。你的應用程式可以作為生產者,向其他應用程式傳送訊息;或者作為一個消費者,接收訊息;也可以在兩者之間進行切換。因此,應用程式和RabbitMQ之間需要建立連線,該連線是一條TCP連線,一旦TCP連線開啟,應用程式就可以建立一條AMQP通道,通道是建立在“真實的”TCP連線內的虛擬連線。AMQP命令都是通過通道傳送過去的,每條通道都會被指派一個唯一的ID(AMQP庫會幫助你記住該ID)。

  RabbitMQ設計為一條內部有多條AMQP通道的TCP連線而不是多條直接傳送AMQP命令的TCP連線,主要原因在於對作業系統來說建立和銷燬TCP會話是非常昂貴的開銷。假使你只進行TCP連線,那麼每個執行緒都需要自行連線到RabbitMQ,這不僅造成TCP連線的居多浪費,而且作業系統每秒只能建立一定數量的連線,在高峰期時會碰到效能瓶頸。為了滿足效能方面的要求,我們可以讓所有的執行緒只使用一條TCP連線;為了確保每個執行緒的私密性,就像擁有獨立連線一樣的話,我們引入了通道的概念。執行緒啟動後,會在TCP連線上建立一條通道,在一條TCP連線上建立多少條通道是沒有限制的,也不會影響到作業系統。