RabbitMQ原理簡單介紹

       其實這篇博客,也算不上是什麼原理,只是將我知道的一些RabbitMQ的知識簡單羅列下,自從我來公司到現在,雖然一直都在用RabbitMQ,也一直想着把這塊總結下,卻一直在給自己找藉口,最近一段時間,覺得火候到了,也該總結總結這塊的東西了,算是給自己的一個交代吧。

       不說其他的,說說RabbitMQ吧,RabbitMQ在我看來就是AMQP(Advanced Message Queuing Protocol)標準協議的一個實現,至於這個AMQP的標準協議具體是怎麼定的,我不太清楚,沒有深入的理解。都說RabbitMQ是一個很好的分佈式MQ,我想這也是因爲RabbitMQ是用Erlang語言開發出來的緣故,Erlang語言是專門爲開發concurrent和distribution系統的一種語言,它能很好的對分佈式和併發做支持,當然,我不會Erlang,所以具體的原理我也不知道了。

      RabbitMQ主要是有這麼幾個部分,個人覺得這張圖能說明RabbitMQ:

     


Publisher:

          是Message的生產者,Publisher這個Clients產生了一些Message。


Consumer:

          Message的消費者,Publisher產生的Message,最終要到達Consumer這個Clients,進行消費。


Exchange:

         指定消息按什麼規則,路由到哪個Queue,Message消息先要到達Exchange,在Server中承擔着從Produce接收Message的責任。


Queue:

         到達Exchange的消息,根據制定的規則(Routing key)到達對應的Queue,在Server中承擔着裝載Message,是Message的容器,等待被消費出去。


Routing key:

         在Exchange和Queue之間隱藏有一條黑線,可以將這條黑線看成是Routing key,Exchange就是根據這些定義好的Routing key將Message送到對應的Queue中去,是Exchange和Queue之間的橋樑。


Broker:

        之前一直不理解這個Broker,其實Broker就是接收和分發消息的應用,也就是說RabbitMQ Server就是Message Broker。


VirtualHost:

        虛擬主機,一個Broker裏可以開有多個VirtualHost,它的作用是用作不同用戶的權限分離。 


Connection:

       是Publisher/Consumer和Broker之間的TCP連接。斷開連接的操作只會在Publisher/Consumer端進行,Broker不會斷開連接,除非出現網絡故障或者Broker服務出現問題,Broker服務宕了。


Connection: Channel: 

        如果每一次訪問RabbitMQ就建立一個Connection,那在消息量大的時候建立TCP Connection的開銷就會很大,導致的後果就是效率低下。


左邊的Client向右邊的Client發送消息,流程:
       第一:獲取Conection
       第二:獲取Channel
       第三:定義Exchange,Queue
       第四:使用一個RoutingKey將Queue Binding到一個Exchange上
       第五:通過指定一個Exchange和一個RoutingKey來將消息發送到對應的Queue上,
       第六:Consumer在接收時也是獲取connection,接着獲取channel,然後指定一個Queue,到Queue上取消息,它對Exchange,RoutingKey及如何Binding都不關心,到對應的Queue上去取消息就行了。
       

        一個Publisher Client發送消息,哪些Consumer Client可以收到消息,在於Exchange,RoutingKey,Queue的關係上。


       RabbitMQ的簡單理論知識就介紹這麼多,下篇博客介紹RabbitMQ在CentoOS7上的安裝和配置。




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