柚子快報(bào)激活碼778899分享:消息隊(duì)列 RabbitMQ簡介
柚子快報(bào)激活碼778899分享:消息隊(duì)列 RabbitMQ簡介
一、安裝和使用方式
1.https://www.erlang.org/ ? ? ?https://www.rabbitmq.com/ ?2.先安裝Erlang,管理員安裝,在安裝rabbitMQ,也是管理員安裝,因?yàn)閞abbitMQ是用Erlang語言開發(fā)的。且每個版本的RabbitMQ對應(yīng)不同的Erlang版本,官網(wǎng)都有對應(yīng)表,還有這兩個安裝目錄不能有中文名字和空格3.進(jìn)入RabbitMQ安裝目錄的sbin下,cmd后,執(zhí)行 ?rabbitmq-plugins enable?rabbitmq_management4.重啟RabbitMQ服務(wù),然后Sbin下,執(zhí)行 rabbitmq-server.bat?5.瀏覽器 ?http://127.0.0.1:15672 用戶名密碼都是guest,進(jìn)入rabbitMQ的管理頁面
資源下載:參考綁定資源
二、基本概念理解
1.Connections:是真正的TCP/IP連接
2.Channel(信道):多路復(fù)用連接中的一條獨(dú)立的雙向數(shù)據(jù)流通道。它是建立在真實(shí)的TCP連接內(nèi)的虛擬連接,復(fù)用TCP連接的通道。其實(shí)就是因?yàn)閯?chuàng)建和關(guān)閉TCP連接開銷都很大,所以盡量少建立連接,建立連接后開辟多個信道,讓這個連接復(fù)用。
3.Exchange(交換器路由器):提供Producer到Queue之間的匹配,接收生產(chǎn)者發(fā)送的消息并按照路由規(guī)則轉(zhuǎn)發(fā)到相應(yīng)隊(duì)列,本身不存,如果沒有隊(duì)列綁定到Exchange,發(fā)來的消息就丟棄。 ? ? 其實(shí)是為了解耦生產(chǎn)者和消息隊(duì)列,生產(chǎn)者只管發(fā)送給Exchange,由Exchange來設(shè)置路由規(guī)則,轉(zhuǎn)發(fā)到不同的隊(duì)列。它有4種消息調(diào)度策略:fanout,direct,topic,headers。
4.Bingding(綁定):用于建立Exchange和Queue間關(guān)聯(lián),它就是路由規(guī)則,也可以理解為Exchange是一個由Binding構(gòu)成的路由表。 ? ? Bingding Key(綁定鍵):Exchange和Queue的綁定關(guān)系,用于匹配Routing Key,最大255字節(jié)。
5.Queue(消息隊(duì)列):存儲消息的一種數(shù)據(jù)結(jié)構(gòu),用來保存消息,直到消息發(fā)送給消費(fèi)者,它是消息的容器,也是消息的終點(diǎn)。 ? ?一個消息可以投入多個隊(duì)列,但一個消息只能被一個訂閱者接收,比如多個訂閱者訂閱一個隊(duì)列,隊(duì)列里的消息會平均分配給多個訂閱者,而不是所有訂閱者消息一樣的。
6.Producer是生產(chǎn)者,Consumer是消費(fèi)者,Message是消息由消息頭和消息體構(gòu)成,消息不透明。 ? ? 消息頭由可選屬性:routing-key(路由鍵)、prionity(消息優(yōu)先權(quán))、delivery-mode(是否持久性存儲)等構(gòu)成。路由鍵標(biāo)記路由規(guī)則,最大255字節(jié)。
7.Broker(代理):RabbitMQ Service,服務(wù)器實(shí)體。
8.Virtual Host: 虛擬主機(jī),表示一批交換器、消息隊(duì)列和相關(guān)對象。虛擬主機(jī)是共享相同的身份認(rèn)證和加密環(huán)境的獨(dú)立服務(wù)器域。每個 vhost 本質(zhì)上就是一個 mini 版的 RabbitMQ 服務(wù)器, ? ?擁有自己的隊(duì)列、交換器、綁定和權(quán)限機(jī)制。vhost 是 AMQP 概念的基礎(chǔ),必須在連接時指定,RabbitMQ 默認(rèn)的 vhost 是 /
9.Exchange消息調(diào)度策略 ? ?三個因素:Exchange Type(Exchange的類型),Binding Key(Exchange和Queue的綁定關(guān)系),消息的標(biāo)記信息(Routing Key和headers)。 ? ?生產(chǎn)者發(fā)送消息的時候一般會指定一個已經(jīng)在Exchange中配置好Routing Key,Exchange接收到后會根據(jù)Routing Key與Exchange Type和Bing Key聯(lián)合使用確定消息進(jìn)入哪個隊(duì)列。 ? ?Exchange Type和Bingding Key一般都是固定配置好的。
? ?Exchange Type:fanout,direct,topic,headers。
1).Fanout(訂閱模式|廣播模式) ? 交換器會把給它的所有消息發(fā)送到該交換器有綁定的消息隊(duì)列中,在這種模式下,Bingding key和Routing Key無效了,只要有綁定就轉(zhuǎn)發(fā), ? 類似子網(wǎng)廣播,每臺機(jī)器都活得一份復(fù)制的消息。這種模式是最快的。
2).Direct(路由模式) ? 這是一種精確匹配:消息的Routing Key與Exchange和Queue間的Bingding Key完全匹配時候才轉(zhuǎn)發(fā)到該Queue。Direct是Exchange的默認(rèn)模式。 ? MQ默認(rèn)提供了一個名字是空字符串的,類型是Direct,并且綁定到所有Queue(每一個Queue和這個無名Exchange間的Bingding Key是Queue的名字)的Exchange。
3).Topic策略 ? 這是一種模糊匹配。Topic通過模式匹配分配消息,姜路由鍵和某個模式進(jìn)行匹配,此時隊(duì)列需要綁定到一個模式上。 ? 可以理解為直接策略的進(jìn)階版,直接策略(如Direct)是完全精確匹配,而topic則支持正則匹配,滿足某類指定規(guī)則的,可以分發(fā)過去。
4).Headers策略? ?這個用的不多,他說根據(jù)Message的一些頭部信息來分發(fā)過濾Message,忽略routing key的屬性,如果header信息和message消息相匹配分發(fā)。
三、界面簡介
1.Overview
MQ的概覽情況,里面包括集群各個節(jié)點(diǎn)的信息、端口映射信息; Totals: 準(zhǔn)備消費(fèi)的消息數(shù)、待確認(rèn)的消息數(shù)、消息總數(shù)以及消息的各種處理速率(發(fā)送速率、確認(rèn)速率、寫入硬盤速率等等)。 Nodes: 其實(shí)就是支撐 RabbitMQ 運(yùn)行的一些機(jī)器,相當(dāng)于集群的節(jié)點(diǎn)。點(diǎn)擊每個節(jié)點(diǎn),可以查看節(jié)點(diǎn)的詳細(xì)信息。 Churn statistics: 展示的是 Connection、Channel 以及 Queue 的創(chuàng)建/關(guān)閉速率。這個里邊展示了端口的映射信息以及 Web 的上下文信息。 Ports and contexts: 5672 是 RabbitMQ 通信端口。 15672 是 Web 管理頁面端口。 25672 是集群通信端口。 Export definitions && Import definitions: 兩個可以導(dǎo)入導(dǎo)出當(dāng)前實(shí)例的一些配置信息:
2.Connections
MQ運(yùn)行中的當(dāng)前保持連接的連接信息,其中包含了連接的虛擬主機(jī)路徑(virtual host),鏈接的主機(jī)及端口、那個用戶連接的,狀態(tài)等信息。在java代碼中通過ConnectionFactory 的 newConnection() 后進(jìn)行創(chuàng)建一個連接,無論是消息生產(chǎn)者還是消息消費(fèi)者,只要連接上來了這里都會顯示出來,當(dāng)使用connection.close()之后 連接將關(guān)閉。
3.Channels
信道或者通道,Channel是在連接中存在的,一個Connection中可以有多個Channel。在Java代碼中 通過連接來創(chuàng)建信道。當(dāng)代碼執(zhí)行connection.createChannel(),該界面下面就會有信道信息,它和連接緊密相關(guān);一個連接可以有多個通道,這個多個通道通過多線程實(shí)現(xiàn),一般情況下,我們在通道中創(chuàng)建隊(duì)列、交換機(jī)等。生產(chǎn)者的通道一般會立馬關(guān)閉;消費(fèi)者是一直監(jiān)聽的,通道幾乎是會一直存在。
Channel:通道名稱。 User name:該通道登錄使用的用戶名。 Model:通道確認(rèn)模式,C 表示 confirm;T 表示事務(wù)。 State:通道當(dāng)前的狀態(tài),running 表示運(yùn)行中;idle 表示空閑。 Unconfirmed:待確認(rèn)的消息總數(shù)。 Prefetch:Prefetch 表示每個消費(fèi)者最大的能承受的未確認(rèn)消息數(shù)目,簡單來說就是用來指定一個消費(fèi)者一次可以從 RabbitMQ 中獲取多少條消息并緩存在消費(fèi)者中,一旦消費(fèi)者的緩沖區(qū)滿了,RabbitMQ 將會停止投遞新的消息到該消費(fèi)者中直到它發(fā)出有消息被 ack 了??偟膩碚f,消費(fèi)者負(fù)責(zé)不斷處理消息,不斷 ack,然后只要 unAcked 數(shù)少于 prefetch * consumer 數(shù)目,RabbitMQ 就不斷將消息投遞過去。 Unacker:待 ack 的消息總數(shù)。 publish:消息生產(chǎn)者發(fā)送消息的速率。 confirm:消息生產(chǎn)者確認(rèn)消息的速率。 unroutable (drop):表示未被接收,且已經(jīng)刪除了的消息。 deliver/get:消息消費(fèi)者獲取消息的速率。 ack:消息消費(fèi)者 ack 消息的速率。
4.Exchange
***交換機(jī),它與隊(duì)列進(jìn)行綁定后,消息根據(jù)exchang的類型,按照不同的綁定規(guī)則分發(fā)消息到消息隊(duì)列中,可以是一個消息被分發(fā)給多個消息隊(duì)列,也可以是一個消息分發(fā)到一個消息隊(duì)列,和隊(duì)列緊密相關(guān); Type 表示交換機(jī)的類型。 Features 有兩個取值 D 和 I。D 表示交換機(jī)持久化,將交換機(jī)的屬性在服務(wù)器內(nèi)部保存,當(dāng) MQ 的服務(wù)器發(fā)生意外或關(guān)閉之后,重啟 RabbitMQ 時不需要重新手動或執(zhí)行代碼去建立交換機(jī),交換機(jī)會自動建立,相當(dāng)于一直存在。I 表示這個交換機(jī)不可以被消息生產(chǎn)者用來推送消息,僅用來進(jìn)行交換機(jī)和交換機(jī)之間的綁定。 Message rate in 表示消息進(jìn)入的速率。Message rate out 表示消息出去的速率。 name 添加的交換機(jī)名稱 type 交換機(jī)類型,有四種; 直連交換機(jī):Direct exchange; 扇形交換機(jī):Fanout exchange; 主題交換機(jī):Topic exchange; 首部交換機(jī):Headers exchange Durability 是否需要持久化,設(shè)置是否持久 durab 設(shè)置為 true 表示持久化, 反之是非持久,設(shè)置為true則將Exchange存盤,即使服務(wù)器重啟數(shù)據(jù)也不會丟失 Auto delete設(shè)置是否自動刪除,當(dāng)最后一個綁定到Exchange上的隊(duì)列刪除后,自動刪除該Exchange,簡單來說也就是如果該Exchange沒有和任何隊(duì)列Queue綁定則刪除 Internal 設(shè)置是否為rabbitmq內(nèi)部使用, true表示是內(nèi)部使用, false表示不是內(nèi)部使用 Arguments 分發(fā)器的其他設(shè)置項(xiàng),json格式;可以設(shè)置消息最大數(shù)量等屬性 下面還有一些常用的操作: Bindings:交換機(jī)和隊(duì)列建立綁定關(guān)系 Publish message:發(fā)送消息;通過交換機(jī)發(fā)送消息到和它有綁定關(guān)系的隊(duì)列中;
5.Queue
隊(duì)列,是Massage的落腳點(diǎn)和等待接收的地方,Queue很適合做負(fù)載均衡,RabbitMQ可以在若干consumer中間實(shí)現(xiàn)輪流調(diào)度(Round-Robin); Features: 表示消息隊(duì)列的特性,D 表示消息隊(duì)列持久化。 State: 表示當(dāng)前隊(duì)列的狀態(tài),running 表示運(yùn)行中;idle 表示空閑。 Ready: 表示待消費(fèi)的消息總數(shù)。 Unacked: 表示待應(yīng)答的消息總數(shù)。 Total: 表示消息總數(shù) Ready+Unacked。 incoming: 表示消息進(jìn)入的速率。 deliver/get: 表示獲取消息的速率。 ack: 表示消息應(yīng)答的速率。
Add a new queue 可以添加一個新的消息隊(duì)列。 點(diǎn)擊每一個消息隊(duì)列的名稱,可以進(jìn)入到消息隊(duì)列中。進(jìn)入到消息隊(duì)列后,可以完成對消息隊(duì)列的進(jìn)一步操作;發(fā)送消息。獲取一條消息。移動一條消息(需要插件的支持)。刪除消息隊(duì)列。清空消息隊(duì)列中的消息。 **Durablity: ** 持久化選項(xiàng),Durable(持久化保存),Transient(即時保存), 持久化保存會在RabbitMQ宕機(jī)或者重啟后,未消費(fèi)的消息仍然存在,即時保存在RabbitMQ宕機(jī)或者重啟后交換機(jī)會不存在。需要重新定義該Exchange。 即使保存可以理解為計(jì)算機(jī)內(nèi)存,關(guān)機(jī)就沒了。 持久化保存可以理解為硬盤,關(guān)機(jī),文件還在。 Ack mode中: Nack message requeue true 獲取消息,不做ack應(yīng)答,消息重新入隊(duì)列; reject requeue true 拒絕獲取消息,消息重新放入隊(duì)列; reject requeue false 拒絕獲取消息,消息不重新入隊(duì)列,會刪除消息; Automatic ack 自動ack應(yīng)答,收到消息,消息會刪除
6.Admin
用戶增刪改查以及虛擬主機(jī)、規(guī)則等的配置; 各項(xiàng)屬性含義如下: Name: 表示用戶名稱。 Tags: 表示角色標(biāo)簽,只能選取一個。 Can access virtual hosts: 表示允許進(jìn)入的虛擬主機(jī)。 Has password: 表示這個用戶是否設(shè)置了密碼。常見的兩個操作是管理用戶和虛擬主機(jī)。 Add a user 可以添加一個新的用戶,添加用戶的時候需要給用戶設(shè)置 Tags,其實(shí)就是用戶角色,如下: none: 不能訪問 management plugin management: 用戶可以通過 AMQP 做的任何事 列出自己可以通過 AMQP 登入的 virtual hosts 查看自己的 virtual hosts 中的 queues, exchanges 和 bindings 查看和關(guān)閉自己的 channels 和 connections 查看有關(guān)自己的 virtual hosts 的“全局”的統(tǒng)計(jì)信息,包含其他用戶在這些 virtual hosts 中的活動 policymaker: management 可以做的任何事 查看、創(chuàng)建和刪除自己的 virtual hosts 所屬的 policies 和 parameters monitoring:management 可以做的任何事 列出所有 virtual hosts,包括他們不能登錄的 virtual hosts 查看其他用戶的 connections 和 channels 查看節(jié)點(diǎn)級別的數(shù)據(jù)如 clustering 和 memory 使用情況 查看真正的關(guān)于所有 virtual hosts 的全局的統(tǒng)計(jì)信息 administrator:policymaker 和 monitoring 可以做的任何事 創(chuàng)建和刪除 virtual hosts 查看、創(chuàng)建和刪除 users 查看創(chuàng)建和刪除 permissions 關(guān)閉其他用戶的 connections impersonator (模擬者) 模擬者,無法登錄管理控制臺。
? ? ?
柚子快報(bào)激活碼778899分享:消息隊(duì)列 RabbitMQ簡介
精彩鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。