RabbitMQ基本概念
伺服器 broker
消息伺服器。
集群 cluster
多台broker組成的整體。RabbitMQ集群並非為了嚴格的可伸縮性。隊列在沒有使用高可用策略(HA)時會存在某一節點上,生產者往其他節點上的生產的消息會被轉發到隊列所在節點。所以如果為了實現嚴格意義的伸縮性擴展,建議使用多個單機模式的broker。cluster能夠更好的為自帶的HA服務。
生產者 producer
消息發送者。
發布 publish
生產者發布消息的行為。
消費者 consumer
消息接收者。
訂閱 subscribe
消費者訂閱某一隊列,來消費隊列中的消息。
隊列 queue
存儲消息。你可以把隊列想像成寄信過程中對方的郵箱。
消息 message
生產者需要傳遞給消費者的信息。你可以把消息想像成要寄出的信。
連接 connection
應用程序與伺服器之間的TCP連接。
信道 channel
TCP連接中的虛機連接。
AMQP協議 AMQP
Advanced Message Queuing Protocol,是一個消息協議,RabbitMQ是它的一個實現。
交換機 exchange
AMQP協議中規定,消息被發布到Exchange,然後交換機根據一定的規則分發消息的副本到隊列。你可以把Exchange想像為郵局。你需要把信(消息)投遞到郵局。交換機有很多類型,將在其他文章介紹,本文將只是簡略介紹。
綁定 bindinng
隊列和交換機之間的連接。你可以把綁定想像為郵局到對方的路徑。
路由鍵 routing key
路由鍵是交換機用來決定消息要投遞到哪個隊列的所需要的信息。你可以想像為信封上的地址,郵局通過這個地址選擇路徑。
用戶 users
RabbitMQ是多用戶系統。通過不同的用戶名密碼和許可權來區分應用。
虛機 vhost
用於隔離不同應用的環境。vhost是獨立的環境。
消息元數據 message metadata
消息的屬性。
消費者確認 ack
消費者在消費時發送ack給伺服器,告知消費完成,伺服器刪除消息。
消費者拒絕 nack/reject
消費者告知伺服器消費失敗。此時消費者可選擇是否重新投遞消息到隊列。reject只能拒絕一條消息,nack可以拒絕多條消息。
強制性的 mandatory
這是一個生產行為的設置,生產者發布消息到交換機時,如果無法到達任何一個隊列,消息會返回給生產者。
死信隊列 dead letter queue
當消息無法被路由,或者消費者拒絕(reject/nack)並且requeue為false,或者消息TTL過期,或者隊列達到最大長度,也就是在消息準備丟棄前,可以配置隊列的x-dead-letter-exchange屬性這些將要丟棄的消息到另外的exchange(DLX),並可以設置x-dead-letter-routing-key定義重新投遞的路由鍵(DLK)。
無法路由交換機 alternate exchange
當消息無法被路由時,發布消息到指定交換機。通過在交換機上設置alternate-exchange屬性來實現。
消息存活時間 TTL
過期的消息或者被丟棄,或者進入死信隊列。通常採用TTL和死信隊列機制實現定時隊列。對於隊列,可通過設置x-message-ttl來規定消息的存活時間。
耐久的 durable
通常用來描述交換機和隊列。耐久的意味著如果伺服器重啟不會丟失,重啟之後會恢復。
持久的 persistent
通常用來描述消息。在消息發布時,當delivery_mode使用persistent(值為2)時,消息在服務重啟之後才不會丟失。但這會降低性能。只有當交換機、隊列、消息都是持久的,消息才不會丟失。
直接交換機 direct exchange
交換機的一種。通過完全匹配binding和routing key來投遞消息。
扇出交換機 fanout exchange
交換機的一種。忽略binding和routing key,投遞消息到交換機下的所有隊列。通常用於實現廣播。
主題交換機 topic exchange
交換機的一種。類似正則匹配。用*匹配一個word,#匹配0個或多個words。
header交換機 header exchange
交換機的一種。不常用且不推薦使用。通過消息header匹配。比如可以使用匹配多個header屬性來路由消息。x-match用來表達需要匹配多少才能路由,值為any/all。
專用隊列 exclusive queue
隊列只能被一個連接使用,並且連接斷開後會被刪除。
自動刪除 auto delete
一種屬性。對於隊列來說,當隊列的最後一個消費者不再訂閱隊列後,隊列被刪除。對於交換機來說,當最後一個隊列也不再綁定交換機的時候,交換機被刪除。
自動過期 auto expire
對於隊列,通過x-expires可以設置隊列多久未使用後自動刪除。
內部交換機 internal exchange
交換機設置此屬性後,只能被用於交換機與交換機的綁定。
RabbitMQ內部交換機 amq.前綴
以amq.開頭的隊列都是RabbitMQ內部交換機。通常用來實現沒有規定exchange的場景,比如直接發送消息到隊列(AMQP中是只能發往交換機的)就是通過默認交換機(amq.default)實現的(它的名字是「」,綁定到所有隊列,binding為隊列的名字)。
預取數量 prefetch
消費者在確認之前可以一次性接收的消息數量。過大或者過小的prefetch值都會導致問題。prefetch如何選擇將在其他文章介紹。
優先順序隊列 priority queue
支持消息優先順序的隊列,優先順序隊列不是先進先出(FIFO)的。
最大優先順序 maximum priority
設置隊列的最大優先順序數字。如果不設置,隊列就不是優先順序隊列。
最大長度 max length/最大位元組長度 max length bytes
分別通過x-max-length和x-max-length-bytes限制隊列長度。長度過大經常會導致內存問題,最大長度是一種保護機制。
消費者利用率 consumer utilisation
這是一個用來反映消費者工作狀態的指標。通常100%的利用率說明消費者進程在很好地工作,隊列不會出現堆積。如果此值太小,說明消費者可能有異常,或者消費速度遠遠趕不上生產速度。
策略 policies
用來動態配置一些策略,如高可用,隊列和交換機的屬性等。
懶隊列 lazy queue
消息將被存儲在磁碟而不是內存,適合那些不及時消費的消息的隊列。
網裂 network partitions
又稱裂腦,分區等。是指集群由於網路原因被分成幾個能夠獨立運行的部分,不同部分各自認為對方宕機,從而不能構成一個整體,不能保證數據一致性。

