本章學習,咱們能夠了解到如下知識點:html
RabbitMQ 是一個開源的消息代理和隊列服務器,用來經過普通協議在徹底不一樣的應用之間共享數據(RabbitMQ可以實現跨語言跨平臺的機制,),RabbitMQ是使用Erlang語言來編寫的,而且RabbitMQ是基於AMQP協議的。git
僅僅經過上面一句話,相信你們必定有不少疑惑和問題。github
我相信你們跟我同樣都會有這樣的疑惑。那麼咱們一塊兒來學習一RabbitMQ吧。面試
咱們來了解第一個問題。數據庫
業界使用度怎麼樣?哪些大廠在使用?爲何?都有哪些優勢? 據我瞭解:滴滴、美團、去哪兒、頭條...編程
這些互聯網大廠都會採用RabbitMQ做爲它底層的消息通訊的一個基礎組件。根本緣由:服務器
緣由就在於它使用了Erlang語言,Erlang語言最初在於交換機領域的架構模式,這樣使得RabbitQ在Broker之間進行數據交互的性能是很是優秀的。微信
還有一點也是取決於做者,RabbitMQ開發的做者在開發RabbitMQ之間,先用Erlang語言作了一個簡單的交換機,而後他驚奇的發現:Erlang的優勢:Erlang有着和原生Socket同樣好的延遲效果。 相信你們接觸過Socket的朋友,對它的有怎樣的性能有必定的瞭解。像咱們耳熟能詳的RPC通訊框架。好比說:dubbo,它底層就是採用了Netty,Netty無非就是網絡編程中的高性能之王,它無非就是一個Socket。 基於這個特色呢,咱們就有了一個充分的選擇RabbitMQ的理由。其實咱們選擇RabbitMQ的時候,有一個主要的考量目標就是:當消息入到RabbtMQ節點上的時候,RabbitMQ的延遲以及響應。網絡
AMQP定義:是具備現代特徵的二進制協議。是一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開放標準,爲面向消息的中間件設計。架構
它就相似於Java中的JMS。是比較上層的規範,基於這個規範能夠開發出各類各項的消息中間件。
模型分析
Pubilsher application:生產者應用 生產的消息,扔到Server端。
Server:指的就是RabbitMQ的節點
Virtual host:虛擬主機,比較上層的一個路由,相似於路由器這麼一個概念。後續介紹
Exchange:交換機,生產者直接將消息投遞到Exchange中。可是要經歷3個過程 -》server->Virtual host->Exchange
先肯定將消息發送到哪臺服務器,那麼就須要先去創建鏈接,設置一些地址等等。 第二層,投遞到哪一個Virtual host 須要定義。 第三層,投遞到哪一個Exchange也須要定義。
再看Consumer application 消費者的應用端,消費端只須要監聽Message Queue,當隊列中有消息的時候,就拿出來消費。所以在Exchange和Message Queue之間有綁定的關係存在,後續詳細介紹。
AMQP核心概念:
以上核心概念先有一個大概的認知,之後會詳細介紹。
生產者把消息投遞到Exchange,Exchange投遞到Queue. 所以咱們的生產者只須要關注把消息投遞到指定的Exchange便可,咱們的消費者只須要監聽指定Queue便可。就是這麼簡單的機制。 經過圖咱們也能看到,生產者不須要關注投遞到哪一個隊列,消費也不須要關注是從哪一個Exchange上來的,這兩塊沒有耦合的狀況。主要是應爲Exchange和Queue有一個綁定的關係。
生產者publisher application 生產消息Message投遞到Exchange上,Exchange綁定MessageQueue,能夠綁定過多個MessageQueue,爲何三個隊列只有其中一個隊列收到了消息呢?主要是因爲Exchange是有一個路由功能的。這個路由就是routing key,這個路由有兩個很是關鍵的點, 第一個:你的消息是須要發送到哪一個Exchange。 第二個:你發消息的時候須要帶上routing key,而後經過Exchange 和 MessageQueue 創建一個綁定關係,經過路由key把消息路由到一個指定的隊列上。而後咱們的消費端直接監聽隊列就好了,就能夠消費了。
歡迎關注我的微信公衆號:Coder編程 獲取最新原創技術文章和免費學習資料,更有大量精品思惟導圖、面試資料、PMP備考資料等你來領,方便你隨時隨地學習技術知識! 新建了一個qq羣:315211365,歡迎你們進羣交流一塊兒學習。謝謝了!也能夠介紹給身邊有須要的朋友。
文章收錄至 Github: https://github.com/CoderMerlin/coder-programming Gitee: https://gitee.com/573059382/coder-programming 歡迎關注並star~
參考資料:
《RabbitMQ消息中間件技術精講》
推薦文章:
消息中間件——RabbitMQ(一)Windws/Linux環境搭建(完整版)
消息中間件——RabbitMQ(二)各大主流消息中間件綜合對比介紹!
原文出處:https://www.cnblogs.com/coder-programming/p/11364524.html