MQ系列------RabbitMQ入門(一)

一.什麼是MQ

MQ(message queue 消息隊列)是一種應用程序對應用程序的通信方法。應用程序通過寫和檢索出入列隊的針對應用程序的數據(消息)來通信,而無需專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用於諸如遠程過程調用的技術。排隊指的是應用程序通過隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。--百度百科

在百度的介紹裏面需要了解到MQ是作爲一種通信方法存在,且消息中的通信的是由程序之間的消息的發送來進行通信的,而通信不是依賴直接調用接口來通信。

二.爲什麼引入MQ

根據MQ的特性,這裏其實主要有三個原因:

  • 解耦
  • 異步
  • 削峯

1.解耦:

如上圖原本服務A只調用服務B,現在因爲業務關係,服務A也需要調用服務C的接口,但如果像以前那樣使用RPC調用的話,則服務A的代碼則,需要修改。若改爲MQ,則服務B,服務C皆爲消息生產者,則服務A作爲消息接收者,只管接收即可,不需要修改服務A的代碼。

2.異步

繼續如上圖,若服務A調用服務B的接口,但是此接口比較耗時,通常RPC的默認等待時間爲15s,如果你修改了RPC的默認等待時間,爲60s,若後面因業務的進一步擴展,服務B的接口超過了60s,難道要修改前端的等待時間,但這個時候,如果使用MQ,則服務A調用B接口後,接口異步執行,等接口執行完之後,通過MQ寫入消息隊列,而服務A則只需要檢驗MQ發來的信息即可,不需要等待接口B接口的完成。

3.削峯

在高併發的時候,許多請求一起發送過來,很多時候直接到操作數據庫階段,因爲連接數過多,容易報錯。

這個時間,對MQ來說,可以控制上行發送來的請求,MQ逐步向隊列拿取數據,實現削峯。而在現實中, 暫時請求的積壓是允許的。

三.RabbitMQ的結構

RabbitMQ是一個基於AMQP(Advanced Message Queuing Protocol,高級消息隊列協議)來開發的產品。

經過上面的介紹,我們知道了MQ的三大組成,分別是生產者,消費者和隊列。然而,實際上,除了這個三大顯著的特徵,MQ還有其他組成。

  1. broker
  2. virtual host
  3. connection
  4. channel
  5. exchange
  6. Queue
  7. Binding

在這裏我先引入一張別人的圖片幫助理解

1.Broker:broker就是MQ的服務端(rabbitmq server),是一個用來接收和轉發信息的應用。

2.virtual host:基於多租戶和安全設計的考慮,不同的用戶在使用同一個rabbitmq server的時候,在服務端通過分別創建不同的虛擬空間,並分別在空間創建AMQP基本組件,分隔不同用戶之間的操作。

3.connection:publisher/consumer與broker的連接是TCP連接,除了網絡出現問題,一般情況是客戶端斷開連接。

4.channel: 如果每一次訪問RabbitMQ都建立一個Connection,在消息量大的時候建立TCP Connection的開銷將是巨大的,效率也較低。Channel是在connection內部建立的邏輯連接,如果應用程序支持多線程,通常每個thread創建單獨的channel進行通訊,AMQP method包含了channel id幫助客戶端和message broker識別channel,所以channel之間是完全隔離的。Channel作爲輕量級的Connection極大減少了操作系統建立TCP connection的開銷。

5.exchange:exchange其實就是一個路由,他主要的作用就是用來分來生產者產生的消息,producer在傳遞消息的時候,會傳遞一個ROUTING_KEY,Exchange會根據這個ROUTING_KEY按照特定的路由算法,將消息路由給指定的queue。Exchange與Queue之間是一個多對多的關係。

Exchange有4種類型:direct(默認),fanout, topic, 和headers

6.Queue:消息隊列,生產者產生的消息通過exchange分發後,到達queue,等待消費者消費消息。

7.Binding:binding是exchange和queue之間的虛擬連接,exchange與queue的多對多關係,就是通過binding進行,而binding的信息存儲在exchange上。

 

推薦一個網站用於學習rabbitmq,http://tryrabbitmq.com/

//四.架構演進

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