RabbitMQ 是一個消息代理:它接受和轉發消息。你能夠把它想象成一個郵局:當你把你想要投寄的郵件放在一個郵箱裏時,你能夠肯定收信人先生或女士最終會把郵件寄給你的收件人。在這個類比中,RabbitMQ是一個郵箱、一個郵局和一個郵遞員。spa
RabbitMQ 與郵局的主要區別在於它不處理紙張,而是接收、存儲和轉發二進制數據塊——消息。代理
生產就是發送,發送消息的程序是生產者。code
隊列是位於 RabbitMQ 內的郵箱的名稱。儘管消息流經 RabbitMQ 和應用程序,但它們只能存儲在隊列中。隊列只受主機的內存和磁盤限制,它本質上是一個大的消息緩衝區。許多生產者能夠向一個隊列發送消息,許多消費者能夠嘗試從一個隊列接收數據。cdn
消費與接受有着類似的含義。消費者是一個主要等待接收消息的程序。blog
交換器必須確切地知道如何處理接收到的消息。它應該附加到特定的隊列嗎?它應該附加到許多隊列中嗎?或者它應該被丟棄。這些規則由 Exchange Types 類型定義。隊列
Exchange Types:direct, topic, headers,fanout
複製代碼
綁定是用於將消息路由到隊列的交換規則。爲了指示Exchange E將消息路由到隊列Q,Q必須綁定到E。某些 Exchange Type
能夠使用一個可選的路由鍵屬性。routing key
的目的是指定這個消息的路由規則。換句話說,routing key
鍵就像一個過濾器。內存
若是AMQP消息不能路由到任何隊列(例如,由於它發佈到的交換器沒有綁定),那麼它要麼被刪除,要麼返回給發佈者,這取決於發佈者設置的消息屬性。路由
生產者在將消息發送給 Exchange 的時候,通常會指定一個 routing key,來指定這個消息的路由規則,而這個 routing key 須要與 Exchange Type 及 binding key 聯合使用才能最終生效。在 Exchange Type 與 binding key 固定的狀況下(在正常使用時通常這些內容都是固定配置好的),咱們的生產者就能夠在發送消息給 Exchange 時,經過指定 routing key 來決定消息流向哪裏。RabbitMQ 爲 routing key 設定的長度限制爲255 bytes。it