RabbitMQ基礎組件介紹

RabbitMQ採用Erlang語言開發

概念

AMQP基本概念

  • 生產者(producer):創建消息,發佈到代理服務器(Message Broker)。
  • 消費者(consumer):消費消息
  • 代理服務器(Message Broker):接收和分發消息的應用,RabbitMQ Server就是消息代理服務器,其中包含概念很多,以RabbitMQ 爲例:信道(channel)、隊列(queue)、交換器(exchange)、路由鍵(routing key)、綁定(binding key)、虛擬主機(vhost)等。
  • 信道(channel): 應用程序(生產與/或消費)和代理服務器之間TCP連接內的虛擬連接,解決TCP連接數量限制及降低TCP連接代價。每個信道有一個ID,其概念與“頻分多路複用”類似。參考上圖:AMQP基本概念
  • 隊列(queue):消息最終到達隊列中,等待消費者消費。使用“basic.consume”訂閱可獲得隊列全部消息,“basic.get”訂閱只能獲得隊列的一條消息(如果隊列中存在消息)。如果無人訂閱,消息將在隊列中存儲,等待訂閱;如果多個消費者同時訂閱該隊列,消息將以自動輪詢(round-robin)方式發送給消費者(Fanout Exchange,每個消費者只能獲得隊列中消息的子集)
  • 交換器(exchange):消息到達代理服務器的第一站,根據分發規則,匹配查詢表中的(routing key)路由鍵(Fanout Exchange除外),分發消息到隊列(queue)中去。常用的類型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast),請參考“2.1交換器”
  • 路由鍵(routing key):消息發送給交換器時,消息將擁有一個路由鍵(默認爲空),交換器根據這個路由鍵將消息發送到匹配的隊列中。
  • 綁定鍵(binding key):隊列需要通過綁定鍵(默認爲空)綁定到交換器上,交換器將消息的路由鍵與所綁定隊列的綁定鍵進行匹配,正確匹配的消息將發送到隊列中。路由鍵是偏向生產的概念,而綁定鍵是偏向消費的概念。
  • 虛擬主機(vhost):AMQP概念的基礎,其本質上就是一個mini版的代理服務器(擁有自己的隊列、交換器和綁定,更重要的是,擁有自己的權限機制),RabbitMQ默認的vhost:“/”(類似於網絡中的namespace),每個用戶只能訪問自己的vhost(通常會被指派至少一個vhost),進而用戶只能訪問自己的隊列、交換器和綁定,所以vhost之間是絕對隔離的(安全性與可移植性)。

RabbitMQ說明

交換器類型
  • direct交換器
    如果路由鍵(routing key)匹配成功,消息就被投遞到對應的各個隊列,綁定鍵(binding key)不支持“*”和“#”。消費者在接受消息的信道上可以給生產者反饋。

  • fanout
    不存在(routing key)路由鍵,消息以自動輪詢(round-robin)的形式發送到對應的隊列(幼兒園給孩子分蘋果,如果蘋果足夠多,將平均分配給每個人),隊列不存在綁定鍵(binding key),消費者在接受消息的當前信道上可以給生產者反饋。

  • topic
    存在(routing key)路由鍵,消息以廣播的形式發送到綁定鍵(bing key)匹配的各個隊列,綁定鍵(binding key)支持“*”和“#”

  • headers (已廢棄)

:除“.”作爲分隔符,匹配任意字符,如.msg-inbox匹配任意.msg-info結尾的字符
#:將匹配任意字符,如#msg-inbox匹配任意以msg-inbox結尾的字符,包含“ . * # ”等字符
RabbitMQ基本概念

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章