分佈式消息隊列RabbitMQ之一:基本概念理解


許多新手在剛接觸RabbitMQ的時候,會被各種名詞弄暈,包括ConnectionFactory 、Connection 、Channel、Exchange、Queue、RoutingKey、BindingKey等等,現在我言簡意賅的描繪一下這些名詞到底是啥概念


首先我們肯定知道RabbitMQ就是消息隊列的一種實現,那麼圍繞這個,我們就可以思考一個消息隊列到底需要什麼,當然是需要隊列,那麼這個隊列就是Queue,那麼其他的所有名詞都是圍繞這個Queue來拓展的。

首先,想要讓隊列不在本地運行,而在網絡中運行,肯定會有連接這個概念,所以就會有Connection,我們發一條消息連接一次,這樣很顯然是浪費資源的,建立連接的過程也很耗時,所以我們就會做一個東西讓他來管理連接,當我用的時候,直接從裏邊拿出來已經建立好的連接發信息,那麼ConnectionFactory應運而生。

接下來,當程序開發時,可能不止用到一個隊列,可能有訂單的隊列、消息的隊列、任務的隊列等等,那麼就需要給不同的queue發信息,那麼和每一個隊列連接的這個概念,就叫Channel

再往下來,當我們開發的時候還有時候會用到這樣一種功能,就是當我發送一條消息,需要讓幾個queue都收到,那麼怎麼解決這個問題呢,難道我要給每一個queue發送一次消息?那豈不是浪費帶寬又浪費資源,我們能想到什麼辦法呢,當然是我們發送給RabbitMQ服務器一次,然後讓RabbitMQ服務器自己解析需要給哪個Queue發,那麼Exchange就是幹這件事的

但是我們給Exchange發消息,他怎麼知道給哪個Queue發呢?這裏就用到了RoutingKey和BindingKey

BindingKey是Exchange和Queue綁定的規則描述,這個描述用來解析當Exchange接收到消息時,Exchange接收到的消息會帶有RoutingKey這個字段,Exchange就是根據這個RoutingKey和當前Exchange所有綁定的BindingKey做匹配,如果滿足要求,就往BindingKey所綁定的Queue發送消息,這樣我們就解決了我們向RabbitMQ發送一次消息,可以分發到不同的Queue的過程


至此,我們就把所有的名詞貫通咯,接下來做個概要描述:


ConnectionFactory:與RabbitMQ服務器連接的管理器

Connection:與RabbitMQ服務器的連接

Channel:與Exchange的連接

Exchange:接受消息提供者(生產者)的消息,並根據消息的RoutingKey和Exchange綁定的BindingKey分配消息

Queue:存儲消息接收者(消費者)的消息

RoutingKey:指定當前消息被誰接受

BindingKey:指定當前Exchange下,什麼樣的RoutingKey會被下派到當前綁定的Queue中


如下圖(本人畫畫功底薄,別見怪~)

其中我們看到BindingKey1有兩個,這樣不會衝突,因爲消息具體發送到哪裏是通過Exchange和RoutingKey來決定的

也就是說我指定Channel1-->Exchange1-->BindingKey1就會被髮送到Queue1中

當我指定Channel-2-->Exchange2-->bindingKey1則會發送到Queue2和Queue3中

溫馨提示:當前的RoutingKey和BindingKey均爲參數名稱,不是參數真實值,那麼真實情況下是下方這樣的:

創建ConnectionFactory,通過ConnectionFactory創建Connection,通過Connection創建Channel

通過channel,聲明一個Exchange名字爲“Exchange2”,聲明一個Queue名字爲“Queue2”,聲明一個Queue名字爲“Queue3

聲明完了,我們就需要讓他們綁定了,讓“Exchange2”綁定到“Queue2”上,設置綁定的RoutingKey(真實情況下參數名都是RoutingKey,沒有BindingKey這個參數,爲了區別用戶發送的和我們綁定的概念,我們才說RoutingKey和BindingKey)爲“key1”,在讓“Exchange2”綁定到“Queue2”上,設置綁定的RoutingKey爲“key1”,然後通過Channel發送消息,發送消息的三個參數Exchange名稱、RoutingKey,和消息,Exchange名稱就是“Exchange2”,RoutingKey就是“key1”,那麼這樣這條消息就會被成功發送到“Queue2”和“Queue3”中了,OK大功告成!




http://blog.csdn.net/xinbaobaoer/article/details/54907793


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