高級(jí)特性與springboot整合01rabbitmq入門篇_第1頁(yè)
高級(jí)特性與springboot整合01rabbitmq入門篇_第2頁(yè)
高級(jí)特性與springboot整合01rabbitmq入門篇_第3頁(yè)
高級(jí)特性與springboot整合01rabbitmq入門篇_第4頁(yè)
高級(jí)特性與springboot整合01rabbitmq入門篇_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

RabbitMQ目錄

MQ的基本概念

RabbitMQ

的安裝和配置

RabbitMQ

快速入門RabbitMQ的工作模式1.MQ的基本概念MQ全稱MessageQueue(消息隊(duì)列),是在消息的傳輸過程中保存消息的容器。多用于分布式系統(tǒng)之間進(jìn)行通信。1.1MQ概述A系統(tǒng)B系統(tǒng)遠(yuǎn)程調(diào)用A系統(tǒng)B系統(tǒng)1.MQ的基本概念MQ全稱MessageQueue(消息隊(duì)列),是在消息的傳輸過程中保存消息的容器。多用于分布式系統(tǒng)之間進(jìn)行通信。1.1MQ概述A系統(tǒng)B系統(tǒng)MQ生產(chǎn)者消費(fèi)者中間件1.應(yīng)用解耦訂單系統(tǒng)物流系統(tǒng)支付系統(tǒng)庫(kù)存系統(tǒng)系統(tǒng)的耦合性越高,容錯(cuò)性就越低,可維護(hù)性就越低。X系統(tǒng)1.3MQ的優(yōu)勢(shì)1.MQ的基本概念1.應(yīng)用解耦1.3MQ的優(yōu)勢(shì)使用MQ使得應(yīng)用間解耦,提升容錯(cuò)性和可維護(hù)性。1.MQ的基本概念訂單系統(tǒng)物流系統(tǒng)支付系統(tǒng)庫(kù)存系統(tǒng)X系統(tǒng)MQMQ1.3MQ的優(yōu)勢(shì)訂單系統(tǒng)DB20ms300ms300ms300ms一個(gè)下單操作耗時(shí):20+300+300+300=920ms用戶點(diǎn)擊完下單按鈕后,需要等待920ms才能得到下單響應(yīng),太慢!1.MQ的基本概念2.異步提速物流系統(tǒng)支付系統(tǒng)庫(kù)存系統(tǒng)5ms5ms5ms5ms300ms300ms300ms用戶點(diǎn)擊完下單按鈕后,只需等待25ms就能得到下單響應(yīng)(20+5=25ms)。提升用戶體驗(yàn)和系統(tǒng)吞吐量(單位時(shí)間內(nèi)處理請(qǐng)求的數(shù)目)。1.MQ的基本概念訂單系統(tǒng)DB20ms物流系統(tǒng)支付系統(tǒng)庫(kù)存系統(tǒng)1.3MQ的優(yōu)勢(shì)2.異步提速M(fèi)QA系統(tǒng)DB每秒最大處理1000請(qǐng)求請(qǐng)求瞬間增多,每秒5000個(gè)請(qǐng)求1.3MQ的優(yōu)勢(shì)3.削峰填谷A系統(tǒng)DB每秒最大處理1000請(qǐng)求請(qǐng)求瞬間增多,每秒5000個(gè)請(qǐng)求1.MQ的基本概念1.3MQ的優(yōu)勢(shì)3.削峰填谷每秒從MQ中拉取1000個(gè)請(qǐng)求MQ使用了MQ之后,限制消費(fèi)消息的速度為1000,這樣一來,高峰期產(chǎn)生的數(shù)據(jù)勢(shì)必會(huì)被積壓在MQ中,高峰就被“削”掉了,但是因?yàn)橄⒎e壓,在高峰期過后的一段時(shí)間內(nèi),消費(fèi)消息的速度還是會(huì)維持在1000,直到消費(fèi)完積壓的消息,這就叫做“填谷”。使用MQ后,可以提高系統(tǒng)穩(wěn)定性。1.MQ的基本概念1.3MQ的優(yōu)勢(shì)3.削峰填谷小結(jié)應(yīng)用解耦:提高系統(tǒng)容錯(cuò)性和可維護(hù)性異步提速:提升用戶體驗(yàn)和系統(tǒng)吞吐量削峰填谷:提高系統(tǒng)穩(wěn)定性1.MQ的基本概念1.3MQ的優(yōu)勢(shì)系統(tǒng)可用性降低系統(tǒng)引入的外部依賴越多,系統(tǒng)穩(wěn)定性越差。一旦MQ宕機(jī),就會(huì)對(duì)業(yè)務(wù)造成影響。如何保證MQ的高可用?系統(tǒng)復(fù)雜度提高M(jìn)Q的加入大大增加了系統(tǒng)的復(fù)雜度,以前系統(tǒng)間是同步的遠(yuǎn)程調(diào)用,現(xiàn)在是通過MQ進(jìn)行異步調(diào)用。如何保證消息不被丟失等情況?1.4MQ的劣勢(shì)1.MQ的基本概念A(yù)系統(tǒng)MQB系統(tǒng)A系統(tǒng)B系統(tǒng)RabbitMQActiveMQRocketMQKafka公司/社區(qū)RabbitApache阿里Apache開發(fā)語(yǔ)言ErlangJavaJavaScala&Java協(xié)議支持AMQP,XMPP,SMTP,STOMPOpenWire,STOMP,REST,XMPP,AMQP自定義自定義協(xié)議,社區(qū)封裝了http協(xié)議支持客戶端支持語(yǔ)言官方支持Erlang,Java,Ruby等,社區(qū)產(chǎn)出多種API,幾乎支持所有語(yǔ)言Java,C,C++,Python,PHP,Perl,.net等Java,C++(不成熟)官方支持Java,社區(qū)產(chǎn)出多種API,如PHP,Python等單機(jī)吞吐量萬(wàn)級(jí)(其次)萬(wàn)級(jí)(最差)十萬(wàn)級(jí)(最好)十萬(wàn)級(jí)(次之)消息延遲微妙級(jí)毫秒級(jí)毫秒級(jí)毫秒以內(nèi)功能特性并發(fā)能力強(qiáng),性能極其好,延時(shí)低,社區(qū)活躍,管理界面豐富老牌產(chǎn)品,成熟度高,文檔較多MQ功能比較完備,擴(kuò)展性佳只支持主要的MQ功能,畢竟是為大數(shù)據(jù)領(lǐng)域準(zhǔn)備的。1.MQ的基本概念1.5常見的MQ產(chǎn)品1.MQ的基本概念1.6RabbitMQ簡(jiǎn)介AMQP,即

AdvancedMessageQueuingProtocol(高級(jí)消息隊(duì)列協(xié)議),是一個(gè)網(wǎng)絡(luò)協(xié)議,是應(yīng)用層協(xié)議的一個(gè)開放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計(jì)?;诖藚f(xié)議的客戶端與消息中間件可傳遞消息,并不受客戶端/中間件不同產(chǎn)品,不同的開發(fā)語(yǔ)言等條件的限制。2006年,AMQP

規(guī)范發(fā)布。類比HTTP。2007年,Rabbit

技術(shù)公司基于

AMQP

標(biāo)準(zhǔn)開發(fā)的

RabbitMQ1.0發(fā)布。RabbitMQ

采用

Erlang

語(yǔ)言開發(fā)。Erlang

語(yǔ)言由

Ericson

設(shè)計(jì),專門為開發(fā)高并發(fā)和分布式系統(tǒng)的一種語(yǔ)言,在電信領(lǐng)域使用廣泛。1.MQ的基本概念1.6RabbitMQ簡(jiǎn)介RabbitMQ基礎(chǔ)架構(gòu)如下圖:1.MQ的基本概念RabbitMQ中的相關(guān)概念:Broker:接收和分發(fā)消息的應(yīng)用,RabbitMQServer就是MessageBrokerVirtualhost:出于多租戶和安全因素設(shè)計(jì)的,把AMQP的基本組件劃分到一個(gè)虛擬的分組中,類似于網(wǎng)絡(luò)中的namespace概念。當(dāng)多個(gè)不同的用戶使用同一個(gè)RabbitMQserver提供的服務(wù)時(shí),可以劃分出多個(gè)vhost,每個(gè)用戶在自己的vhost創(chuàng)建exchange/queue等Connection:publisher/consumer和broker之間的TCP連接Channel:如果每一次訪問RabbitMQ都建立一個(gè)Connection,在消息量大的時(shí)候建立TCPConnection的開銷將是巨大的,效率也較低。Channel是在connection內(nèi)部建立的邏輯連接,如果應(yīng)用程序支持多線程,通常每個(gè)thread創(chuàng)建單獨(dú)的channel進(jìn)行通訊,AMQPmethod包含了channelid幫助客戶端和messagebroker識(shí)別channel,所以channel之間是完全隔離的。Channel作為輕量級(jí)的Connection極大減少了操作系統(tǒng)建立TCPconnection的開銷1.6RabbitMQ簡(jiǎn)介Exchange:message到達(dá)broker的第一站,根據(jù)分發(fā)規(guī)則,匹配查詢表中的routingkey,分發(fā)消息到queue中去。常用的類型有:direct(point-to-point),topic(publish-subscribe)andfanout(multicast)Queue:消息最終被送到這里等待consumer取走Binding:exchange和queue之間的虛擬連接,binding中可以包含routingkey。Binding信息被保存到exchange中的查詢表中,用于message的分發(fā)依據(jù)1.MQ的基本概念RabbitMQ中的相關(guān)概念:1.6RabbitMQ簡(jiǎn)介RabbitMQ提供了6種工作模式:簡(jiǎn)單模式、workqueues、Publish/Subscribe發(fā)布與訂閱模式、Routing路由模式、Topics主題模式、RPC遠(yuǎn)程調(diào)用模式(遠(yuǎn)程調(diào)用,不太算MQ;暫不作介紹)。官網(wǎng)對(duì)應(yīng)模式介紹:1.MQ的基本概念1.6RabbitMQ簡(jiǎn)介目錄

MQ的基本概念

RabbitMQ

的安裝和配置

RabbitMQ

快速入門RabbitMQ的工作模式RabbitMQ官方地址:安裝文檔:參考筆記RabbitMQ安裝說明.pdf2.RabbitMQ的安裝和配置目錄

MQ的基本概念

RabbitMQ

的安裝和配置

RabbitMQ

快速入門RabbitMQ的工作模式Spring整合RabbitMQ3.RabbitMQ

快速入門需求:使用簡(jiǎn)單模式完成消息傳遞步驟:創(chuàng)建工程(生成者、消費(fèi)者)分別添加依賴編寫生產(chǎn)者發(fā)送消息編寫消費(fèi)者接收消息3.1入門程序3.RabbitMQ

快速入門上述的入門案例中其實(shí)使用的是如下的簡(jiǎn)單模式:在上圖的模型中,有以下概念:P:生產(chǎn)者,也就是要發(fā)送消息的程序C:消費(fèi)者:消息的接收者,會(huì)一直等待消息到來queue:消息隊(duì)列,圖中紅色部分。類似一個(gè)郵箱,可以緩存消息;生產(chǎn)者向其中投遞消息,消費(fèi)者從其中取出消息PC3.2小結(jié)目錄

MQ的基本概念

RabbitMQ

的安裝和配置

RabbitMQ

快速入門RabbitMQ的工作模式Spring整合RabbitMQ4.RabbitMQ

的工作模式WorkQueues:與入門程序的簡(jiǎn)單模式相比,多了一個(gè)或一些消費(fèi)端,多個(gè)消費(fèi)端共同消費(fèi)同一個(gè)隊(duì)列中的消息。應(yīng)用場(chǎng)景:對(duì)于任務(wù)過重或任務(wù)較多情況使用工作隊(duì)列可以提高任務(wù)處理的速度。PC1C24.1Workqueues工作隊(duì)列模式1.模式說明4.RabbitMQ

的工作模式WorkQueues與入門程序的簡(jiǎn)單模式的代碼幾乎是一樣的。可以完全復(fù)制,并多復(fù)制一個(gè)消費(fèi)者進(jìn)行多個(gè)消費(fèi)者同時(shí)對(duì)消費(fèi)消息的測(cè)試。4.1Workqueues工作隊(duì)列模式2.代碼編寫4.RabbitMQ

的工作模式1.在一個(gè)隊(duì)列中如果有多個(gè)消費(fèi)者,那么消費(fèi)者之間對(duì)于同一個(gè)消息的關(guān)系是競(jìng)爭(zhēng)的關(guān)系。3.小結(jié)4.1Workqueues工作隊(duì)列模式2.WorkQueues對(duì)于任務(wù)過重或任務(wù)較多情況使用工作隊(duì)列可以提高任務(wù)處理的速度。例如:短信服務(wù)部署多個(gè),只需要有一個(gè)節(jié)點(diǎn)成功發(fā)送即可。4.RabbitMQ

的工作模式在訂閱模型中,多了一個(gè)Exchange角色,而且過程略有變化:P:生產(chǎn)者,也就是要發(fā)送消息的程序,但是不再發(fā)送到隊(duì)列中,而是發(fā)給X(交換機(jī))C:消費(fèi)者,消息的接收者,會(huì)一直等待消息到來Queue:消息隊(duì)列,接收消息、緩存消息Exchange:交換機(jī)(X)。一方面,接收生產(chǎn)者發(fā)送的消息。另一方面,知道如何處理消息,例如遞交給某個(gè)特別隊(duì)列、遞交給所有隊(duì)列、或是將消息丟棄。到底如何操作,取決于Exchange的類型。Exchange有常見以下3種類型:Fanout:廣播,將消息交給所有綁定到交換機(jī)的隊(duì)列Direct:定向,把消息交給符合指定routingkey的隊(duì)列Topic:通配符,把消息交給符合routingpattern(路由模式)的隊(duì)列Exchange(交換機(jī))只負(fù)責(zé)轉(zhuǎn)發(fā)消息,不具備存儲(chǔ)消息的能力,因此如果沒有任何隊(duì)列與Exchange綁定,或者沒有符合路由規(guī)則的隊(duì)列,那么消息會(huì)丟失!PC1C2X4.2Pub/Sub訂閱模式

1.模式說明4.RabbitMQ

的工作模式1.交換機(jī)需要與隊(duì)列進(jìn)行綁定,綁定之后;一個(gè)消息可以被多個(gè)消費(fèi)者都收到。2.發(fā)布訂閱模式與工作隊(duì)列模式的區(qū)別:工作隊(duì)列模式不用定義交換機(jī),而發(fā)布/訂閱模式需要定義交換機(jī)發(fā)布/訂閱模式的生產(chǎn)方是面向交換機(jī)發(fā)送消息,工作隊(duì)列模式的生產(chǎn)方是面向隊(duì)列發(fā)送消息(底層使用默認(rèn)交換機(jī))發(fā)布/訂閱模式需要設(shè)置隊(duì)列和交換機(jī)的綁定,工作隊(duì)列模式不需要設(shè)置,實(shí)際上工作隊(duì)列模式會(huì)將隊(duì)列綁定到默認(rèn)的交換機(jī)4.3Pub/Sub訂閱模式

3.小結(jié)4.RabbitMQ

的工作模式隊(duì)列與交換機(jī)的綁定,不能是任意綁定了,而是要指定一個(gè)RoutingKey(路由key)消息的發(fā)送方在向Exchange發(fā)送消息時(shí),也必須指定消息的RoutingKeyExchange不再把消息交給每一個(gè)綁定的隊(duì)列,而是根據(jù)消息的RoutingKey進(jìn)行判斷,只有隊(duì)列的Routingkey與消息的Routingkey完全一致,才會(huì)接收到消息圖解:P:生產(chǎn)者,向Exchange發(fā)送消息,發(fā)送消息時(shí),會(huì)指定一個(gè)routingkeyX:Exchange(交換機(jī)),接收生產(chǎn)者的消息,然后把消息遞交給與routingkey完全匹配的隊(duì)列C1:消費(fèi)者,其所在隊(duì)列指定了需要routingkey為error的消息C2:消費(fèi)者,其所在隊(duì)列指定了需要routingkey為info、error、warning的消息PC1C2Xinfowarningerrorerror4.3Routing路由模式1.模式說明:4.RabbitMQ

的工作模式Routing模式要求隊(duì)列在綁定交換機(jī)時(shí)要指定routingkey,消息會(huì)轉(zhuǎn)發(fā)到符合routingkey的隊(duì)列。3.小結(jié)4.3Routing路由模式4.RabbitMQ

的工作模式Topic類型與Direct相比,都是可以根據(jù)RoutingKey把消息路由到不同的隊(duì)列。只不過Topic類型Exchange可以讓隊(duì)列在綁定Routingkey的時(shí)候使用通配符!Routingkey一般都是有一個(gè)或多個(gè)單詞組成,多個(gè)單詞之間以”.”分割,例如:item.insert通配符規(guī)則:#匹配一個(gè)或多個(gè)詞,*匹配不多不少恰好1個(gè)詞,例如:item.#能夠匹配item.insert.abc或者item.insert,item.*只能匹配item.insert4.4Topics通配符模式1.模式說明4.RabbitMQ

的工作模式圖解:紅色Queue:綁定的是usa.#,因此凡是以u(píng)sa.開頭的routingkey都會(huì)被匹配到黃色Queue:綁定的是#.news,因此凡是以.news結(jié)尾的routingkey都會(huì)被匹配PC1C2X*.or

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論