您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“如何理解RabbitMQ核心概念和AMQP協(xié)議”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“如何理解RabbitMQ核心概念和AMQP協(xié)議”吧!
目錄
前言
1. 初識(shí)RabbitMQ
2. 互聯(lián)網(wǎng)大廠為什么選擇RabbitMQ?
3. RabbiMQ的高性能之道是如何做到的?
4. 什么是AMQP高級(jí)消息隊(duì)列協(xié)議?
5. AMQP核心概念是什么?
6. RabbitMQ整體架構(gòu)模型是什么樣子的?
7. RabbitMQ消息是如何流轉(zhuǎn)的?
本章學(xué)習(xí),我們可以了解到以下知識(shí)點(diǎn):
互聯(lián)網(wǎng)大廠為什么選擇RabbitMQ?
RabbiMQ的高性能之道是如何做到的?
什么是AMQP高級(jí)協(xié)議?
AMQP核心概念是什么?
RabbitMQ整體架構(gòu)模型是什么樣子的?
RabbitMQ消息是如何流轉(zhuǎn)的?
RabbitMQ 是一個(gè)開(kāi)源的消息代理和隊(duì)列服務(wù)器,用來(lái)通過(guò)普通協(xié)議在完全不同的應(yīng)用之間共享數(shù)據(jù)(RabbitMQ能夠?qū)崿F(xiàn)跨語(yǔ)言跨平臺(tái)的機(jī)制,),RabbitMQ是使用Erlang語(yǔ)言來(lái)編寫(xiě)的,并且RabbitMQ是基于AMQP協(xié)議的。
僅僅通過(guò)上面一句話,相信大家一定有很多疑惑和問(wèn)題。
RabbitM成熟度到底怎么樣?
業(yè)界使用度怎么樣?哪些大廠在使用?為什么?
包括RabbitMQ到底都有哪些特點(diǎn)?
RabbitMQ為什么要用Erlang語(yǔ)言去編寫(xiě)?
什么是AMQP協(xié)議?AMQP協(xié)議里面的具體的規(guī)范又是什么?
我相信大家跟我一樣都會(huì)有這樣的疑惑。那么我們一起來(lái)學(xué)習(xí)一RabbitMQ吧。
我們來(lái)了解第一個(gè)問(wèn)題。
業(yè)界使用度怎么樣?哪些大廠在使用?為什么?都有哪些優(yōu)點(diǎn)?
據(jù)我了解:滴滴、美團(tuán)、去哪兒、頭條…
這些互聯(lián)網(wǎng)大廠都會(huì)采用RabbitMQ作為它底層的消息通信的一個(gè)基礎(chǔ)組件。根本原因:
開(kāi)源、性能優(yōu)秀、穩(wěn)定性保障
提供可靠性消息投遞模式(confirm)、返回模式(return)
與SpringAMQP完美的整合、擴(kuò)展性變得更強(qiáng)、API豐富
集群模式豐富、表達(dá)式配置、HA(高可用)模式、鏡像隊(duì)列模型
保證數(shù)據(jù)不丟失的前提下做到高可靠性、可用性
原因就在于它使用了Erlang語(yǔ)言,Erlang語(yǔ)言最初在于交換機(jī)領(lǐng)域的架構(gòu)模式,這樣使得RabbitQ在Broker之間進(jìn)行數(shù)據(jù)交互的性能是非常優(yōu)秀的。
還有一點(diǎn)也是取決于作者,RabbitMQ開(kāi)發(fā)的作者在開(kāi)發(fā)RabbitMQ之間,先用Erlang語(yǔ)言做了一個(gè)簡(jiǎn)單的交換機(jī),然后他驚奇的發(fā)現(xiàn):Erlang的優(yōu)點(diǎn):Erlang有著和原生Socket一樣好的延遲效果。
相信大家接觸過(guò)Socket的朋友,對(duì)它的有怎樣的性能有一定的了解。像我們耳熟能詳?shù)腞PC通信框架。比如說(shuō):dubbo,它底層就是采用了Netty,Netty無(wú)非就是網(wǎng)絡(luò)編程中的高性能之王,它無(wú)非就是一個(gè)Socket。
基于這個(gè)特點(diǎn)呢,我們就有了一個(gè)充分的選擇RabbitMQ的理由。其實(shí)我們選擇RabbitMQ的時(shí)候,有一個(gè)主要的考量目標(biāo)就是:當(dāng)消息入到RabbtMQ節(jié)點(diǎn)上的時(shí)候,RabbitMQ的延遲以及響應(yīng)。
AMQP全稱:Advanced Message Queuing Protocol(高級(jí)消息隊(duì)列協(xié)議)
AMQP定義:是具有現(xiàn)代特征的二進(jìn)制協(xié)議。是一個(gè)提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)高級(jí)消息隊(duì)列協(xié)議,是應(yīng)用層協(xié)議的一個(gè)開(kāi)放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計(jì)。
它就類似于Java中的JMS。是比較上層的規(guī)范,基于這個(gè)規(guī)范可以開(kāi)發(fā)出各種各項(xiàng)的消息中間件。
模型分析
Pubilsher application:生產(chǎn)者應(yīng)用 生產(chǎn)的消息,扔到Server端。
Server:指的就是RabbitMQ的節(jié)點(diǎn)
Virtual host:虛擬主機(jī),比較上層的一個(gè)路由,類似于路由器這么一個(gè)概念。后續(xù)介紹
Exchange:交換機(jī),生產(chǎn)者直接將消息投遞到Exchange中。但是要經(jīng)歷3個(gè)過(guò)程 -》server->Virtual host->Exchange
先確定將消息發(fā)送到哪臺(tái)服務(wù)器,那么就需要先去建立連接,設(shè)置一些地址等等。
第二層,投遞到哪個(gè)Virtual host 需要定義。
第三層,投遞到哪個(gè)Exchange也需要定義。
再看Consumer application 消費(fèi)者的應(yīng)用端,消費(fèi)端只需要監(jiān)聽(tīng)Message Queue,當(dāng)隊(duì)列中有消息的時(shí)候,就拿出來(lái)消費(fèi)。因此在Exchange和Message Queue之間有綁定的關(guān)系存在,后續(xù)詳細(xì)介紹。
AMQP核心概念:
server: 又稱Broker,接收客戶端的鏈接,實(shí)現(xiàn)AMQP實(shí)體服務(wù)
Connection: 鏈接,應(yīng)用程序與Broker的網(wǎng)絡(luò)連接
Channel:網(wǎng)絡(luò)信道,幾乎所有的操作(數(shù)據(jù)的讀、寫(xiě))都在Channel中進(jìn)行,Channel是進(jìn)行消息讀寫(xiě)的通道??蛻舳丝山⒍鄠€(gè)Channel,每個(gè)Channel代表一個(gè)會(huì)話任務(wù)。
Message:消息,服務(wù)器和應(yīng)用程序之間傳送的數(shù)據(jù),由Properties和Body組成。Properties可以對(duì)消息進(jìn)行修飾,比如消息的優(yōu)先級(jí)、延遲等高級(jí)特性;Body則就是消息體內(nèi)容。
Virtual host:虛擬地址,用于進(jìn)行邏輯隔離,最上層的消息路由。一個(gè)Virtual host 里面可以有若干個(gè)Exchange和Queue,同一個(gè)Virtual Host里面不能有相同名稱的Exchange和Queue。一種邏輯概念,類似Redis的邏輯數(shù)據(jù)庫(kù)。用來(lái)劃分具體的服務(wù)。
Exchange:交換機(jī),接收消息,根據(jù)路由鍵轉(zhuǎn)發(fā)消息到綁定的隊(duì)列
Binding:Exchange 和Queue之間的虛擬連接,Binding中可以包含routing key
Routing key:一個(gè)路由股則,虛擬機(jī)可用它來(lái)確定如何路由一個(gè)特定消息。
Queue:也稱為message Queue,消息隊(duì)列,保存消息并將它們轉(zhuǎn)發(fā)給消費(fèi)者。
以上核心概念先有一個(gè)大概的認(rèn)知,以后會(huì)詳細(xì)介紹。
生產(chǎn)者把消息投遞到Exchange,Exchange投遞到Queue.
因此我們的生產(chǎn)者只需要關(guān)注把消息投遞到指定的Exchange即可,我們的消費(fèi)者只需要監(jiān)聽(tīng)指定Queue即可。就是這么簡(jiǎn)單的機(jī)制。
通過(guò)圖我們也能看到,生產(chǎn)者不需要關(guān)注投遞到哪個(gè)隊(duì)列,消費(fèi)也不需要關(guān)注是從哪個(gè)Exchange上來(lái)的,這兩塊沒(méi)有耦合的情況。主要是應(yīng)為Exchange和Queue有一個(gè)綁定的關(guān)系。
生產(chǎn)者publisher application 生產(chǎn)消息Message投遞到Exchange上,Exchange綁定MessageQueue,可以綁定過(guò)多個(gè)MessageQueue,為什么三個(gè)隊(duì)列只有其中一個(gè)隊(duì)列收到了消息呢?主要是由于Exchange是有一個(gè)路由功能的。這個(gè)路由就是routing key,這個(gè)路由有兩個(gè)非常關(guān)鍵的點(diǎn),
第一個(gè):你的消息是需要發(fā)送到哪個(gè)Exchange。
第二個(gè):你發(fā)消息的時(shí)候需要帶上routing key,然后通過(guò)Exchange 和 MessageQueue 建立一個(gè)綁定關(guān)系,通過(guò)路由key把消息路由到一個(gè)指定的隊(duì)列上。然后我們的消費(fèi)端直接監(jiān)聽(tīng)隊(duì)列就行了,就可以消費(fèi)了。
到此,相信大家對(duì)“如何理解RabbitMQ核心概念和AMQP協(xié)議”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。