目錄
1.RabbitMQ消息隊列核心概念介紹
2.Exchange交換機介紹
RabbitMQ
是一個開源的AMQP實作,伺服器端用Erlang語言編寫,支援多種用戶端,如:Python、Ruby、.NET、Java、C,用于在分布式系統中存儲轉發消息,在易用性、擴充性、高可用性等方面表現不錯,與SpringAMQP完美的整合,API豐富易用
核心概念

Broker
RabbitMQ的服務端程式,可以認為一個mq節點就是一個broker
Producer生産者
建立消息Message,然後釋出到RabbitMQ中
Consumer消費者
消費隊列裡面的消息
Message消息
生産消費的内容,有消息頭和消息體,也包括多個屬性配置,比如routingKey路由鍵
Queue隊列
是RabbitMQ的内部對象,用于存儲消息,消息都隻能存儲在隊列中
Channel信道
一條支援多路複用的通道,獨立的雙向資料流通道,可以釋出、訂閱、接收消息
信道是建立在真實的TCP連接配接内的虛拟連接配接,複用TCP連接配接的通道
Connection連接配接
是RabbitMQ的socket連結,它封裝了socket協定相關部分邏輯,一個連接配接上可以有多個channel進行通信
Exchange交換機
生産者将消息發送到Exchange,交換機将消息路由到一個或者多個隊列中,裡面有多個類型,隊列和交換機是多對多的關系
RoutingKey路由鍵
生産者将消息發給交換機的時候,一般會指定一個RoutingKey,用來指定這個消息的路由規則
最大長度255位元組
Binding綁定
通過綁定将交換機與隊列關聯起來,在綁定的時候一般會指定一個綁定鍵(BindingKey),這樣RabbitMQ就知道如何正确地将消息路由到隊列了
生産者将消息發送給交換機時,需要一個RoutingKey,當BindingKey和RoutingKey相比對時,消息會被路由到對應的隊列中
Virtual Host虛拟主機
用于不同業務子產品的邏輯隔離,一個Virtual Host裡面可以有若幹個Exchange和Queue,同一個Virtual Host裡面不能有相同名稱的Exchange或Queue
預設是/
/dev
/test
/pro
RabbitMQ的Exchange交換機
生産者将消息發送到Exchange,交換機将消息路由到一個或者多個隊列中,交換機有多個類型,隊列和交換機是多對多的關系
交換機隻負責轉發消息,不具備存儲消息的能力,如果沒有隊列和exchange綁定,或者沒有符合的路由規則,則消息會被丢失
RabbitMQ有四種交換機類型,分别是Direct exchange、Fanout exchange、Topic exchange、Headers exchange,最後一個基本不用
交換機類型
Direct Exchange定向
将一個隊列綁定到交換機上,要求該消息與一個特定的路由鍵完全比對
處理路由鍵
Fanout Exchange廣播
隻需要簡單的将隊列綁定到交換機上,一個發送到交換機的消息都會被轉發到與該交換機綁定的所有隊列上。很像子網廣播,每台子網内的主機都獲得了一份複制的消息
Fanout交換機轉發消息是最快的,用于釋出訂閱、廣播形式,中文是扇形
不處理路由鍵
Topic Exchange通配符
主題交換機是一種釋出、訂閱的模式,結合了直連交換機和扇形交換機的特點
将路由鍵和某模式進行比對。此時隊列需要綁定到一個模式上
符号“#”比對一個或多個詞,符号“*”僅僅比對一個詞
Headers Exchange(少用)
根據發送的消息内容中和headers屬性進行比對,在綁定Queue與Exchange時指定一組鍵值對
當消息發送到RabbitMQ時會取到該消息的headers與Exchange綁定時指定的鍵值對進行比對
如果完全比對則消息會路由到該隊列,否則不會路由到該隊列