RabbitMq概要

RabbitMq

image.png

1. 背景
    a. AMQP-高級(jí)消息隊(duì)列協(xié)議
    b. 解耦
    c. 方便拓展
2. 概念
     A. 消費(fèi)者和生產(chǎn)者
        (1). 生產(chǎn)者-producer創(chuàng)建消息,然后發(fā)布(發(fā)送到)代理服務(wù)器(RabbitMQ)
            $1. 什么是消息
                a. 有效載荷(payload)
                    任意數(shù)據(jù)煤惩,任意格式
                b. 標(biāo)簽(label)
                    描述了有效載荷,RabbitMQ通過(guò)它能決定誰(shuí)能獲得消息的拷貝
                c. 發(fā)后即忘(fire-and-forget)的通信方式
        (2). 消費(fèi)者連接到代理服務(wù)器,訂閱到隊(duì)列上
            a. 隊(duì)列類(lèi)似一個(gè)具名郵箱
            b. 消息在到達(dá)隊(duì)列后,RabbitMQ會(huì)把消息傳遞給其中的一個(gè)訂閱/監(jiān)聽(tīng)的消費(fèi)者
            c. 消息標(biāo)簽不會(huì)隨著有效載荷一同傳遞
            d. 如果需要得知發(fā)送方信息,只有把發(fā)送方信息放入有效載荷中
        (3). 信道(生產(chǎn)者或消費(fèi)者向服務(wù)器建立連接)
            a. 建立在tcp連接內(nèi)的虛擬連接
            b. 每條信道都會(huì)有一個(gè)唯一的ID(AMQP庫(kù)存儲(chǔ))
            c. 避免了每次建立和銷(xiāo)毀TCP連接會(huì)話(huà)帶來(lái)的開(kāi)銷(xiāo)
            d. 避免了遭遇高峰期操作系統(tǒng)TCP的瓶頸
            e. 一次tcp連接里可以創(chuàng)建多條信道,既保證了線(xiàn)程的私密性,同時(shí)也避免了給操作系統(tǒng)的tcp棧帶來(lái)額外負(fù)擔(dān)
    B. AMQP消息路由
        (1). 隊(duì)列
            $1. AMQP消息通信的基礎(chǔ)模塊
                a. 為消息提供了住所,消息在此等待消費(fèi)
                b .對(duì)負(fù)載均衡來(lái)說(shuō),隊(duì)列是絕佳方案,只需附加一堆消費(fèi)者,并讓RabbitMQ以循環(huán)的方式均勻的分配發(fā)來(lái)的消息
                c. 隊(duì)列是RabbitMQ中消息最后的終點(diǎn)(除非消息進(jìn)入了黑洞)
            $2. 消費(fèi)者通過(guò)兩種方式接受特定隊(duì)列里的消息
                a. basic.consume 訂閱
                    將信道設(shè)置為訂閱模式,消息到達(dá)隊(duì)列時(shí)自動(dòng)接受
                b. basic.get 單條消息
                    不建議放在循環(huán)里使用,影響性能
                消費(fèi)者應(yīng)通過(guò)consume來(lái)實(shí)現(xiàn)高吞吐量
            $3. 隊(duì)列沒(méi)有消費(fèi)者訂閱
                消息在隊(duì)列中等待,直到有消費(fèi)者訂閱,才把消息發(fā)給消費(fèi)者
            $4. 多消費(fèi)者訂閱隊(duì)列
                a. 機(jī)制
                    (1). 循環(huán)發(fā)送給消費(fèi)者
                    (2). 每條消息只會(huì)發(fā)送給一個(gè)消費(fèi)者
            $5. 消費(fèi)者消息確認(rèn)機(jī)制
                a. 命令
                    (1). basic.ack 顯示向Rabbit發(fā)送確認(rèn)
                    (2). auto_ack參數(shù)設(shè)置為true
                    
                b. 機(jī)制
                    (1). 消費(fèi)者收到消息沒(méi)有確認(rèn)就從服務(wù)器斷開(kāi)連接
                        Rabbit會(huì)把消息傳遞給下一位消費(fèi)者
                    (2). 消費(fèi)者收到消息沒(méi)有確認(rèn)并且仍在線(xiàn)
                        不會(huì)再往該消費(fèi)者發(fā)送消息了
                c. 拒絕消息
                    (1). 從服務(wù)器斷開(kāi)連接
                    (2). RabbitMQ2.0以上版本,basic.reject
                        reject命令中的requeue的參數(shù)設(shè)置
                            為true 時(shí) ,RabbitMQ會(huì)自動(dòng)把消息傳送給下一個(gè)消費(fèi)者
                            為false時(shí),Rabbit會(huì)從隊(duì)列移除該消息,不會(huì)發(fā)送給其他消費(fèi)者
             $6. 隊(duì)列創(chuàng)建
                a. 須知
                消費(fèi)者在同一條信道上訂閱另一條隊(duì)列時(shí),無(wú)法再聲明隊(duì)列,必須取消訂閱,設(shè)置信道為傳輸模式
                b.  隊(duì)列名稱(chēng)
                  (1). 指定隊(duì)列名稱(chēng)
                  (2). 不指定名稱(chēng)
                    Rabbit隨機(jī)分配名稱(chēng)并在queue.declare命令中返回
                c. 重點(diǎn)參數(shù)
                    (1). exclusive
                        為true時(shí),隊(duì)列變成私有的, 只有當(dāng)前應(yīng)用程序才能消費(fèi)隊(duì)列炼邀,可以用來(lái)限制一個(gè)隊(duì)列只能有一個(gè)消費(fèi)者
                    (2). auto-delete
                        當(dāng)最后一個(gè)消費(fèi)者取消訂閱時(shí),隊(duì)列就會(huì)自動(dòng)移除
        (2). 交換器
            $1. 四種類(lèi)型的交換器
                a. direct
                    如果路由建匹配,消息就被投遞到對(duì)應(yīng)的隊(duì)列
                b. fanout
                    將收到的消息廣播到綁定的隊(duì)列上
                c. topic
                    使來(lái)自不同源頭的消息到達(dá)相同的隊(duì)列上
    
        (3). 多租戶(hù)于權(quán)限控制
          $1. vhost 虛擬主機(jī)
              a. 方便遷移
              b. 數(shù)據(jù)隔離
          $2. 權(quán)限控制可以在服務(wù)器上或vhost上
              a.消息持久化與策略
                * 必須點(diǎn)
                  (1). 消息的投遞模式設(shè)置成2
                  (2). 發(fā)送給持久化的交換器
                  (3). 到達(dá)持久化的隊(duì)列
              b. AMQP事務(wù)
                發(fā)送方確認(rèn)
3. 實(shí)踐
    (1). 目的
        $1. 解耦
        $2. 提高請(qǐng)求處理速度
        $3. 方便擴(kuò)展
    (2). 發(fā)后即忘模式
        $1. 概念
            a. 創(chuàng)建任務(wù),放置到交換機(jī)上,無(wú)需知道結(jié)果
        $2. 場(chǎng)景運(yùn)用
            a. 日志告警框架
            b. 并行處理
                (1). 執(zhí)行主線(xiàn)任務(wù)
                (2). 附帶任務(wù)分開(kāi)進(jìn)行
    (3). 實(shí)現(xiàn)rpc
        $1. 使用消息來(lái)發(fā)回應(yīng)答
            a. AMQP消息頭字段 reply_to
            b. 生產(chǎn)者以該字段創(chuàng)建隊(duì)列,并監(jiān)聽(tīng)隊(duì)列
            c. 消費(fèi)者檢查該字段魄揉,并以該隊(duì)列名稱(chēng)作為路由鍵
        $2. 匿名隊(duì)列
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拭宁,隨后出現(xiàn)的幾起案子什猖,更是在濱河造成了極大的恐慌,老刑警劉巖红淡,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件不狮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡在旱,警方通過(guò)查閱死者的電腦和手機(jī)摇零,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桶蝎,“玉大人驻仅,你說(shuō)我怎么就攤上這事谅畅。” “怎么了噪服?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵毡泻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我粘优,道長(zhǎng)仇味,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任雹顺,我火速辦了婚禮丹墨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嬉愧。我一直安慰自己贩挣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布没酣。 她就那樣靜靜地躺著王财,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裕便。 梳的紋絲不亂的頭發(fā)上搪搏,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音闪金,去河邊找鬼疯溺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛哎垦,可吹牛的內(nèi)容都是我干的囱嫩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼漏设,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼墨闲!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起郑口,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鸳碧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后犬性,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瞻离,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年乒裆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了套利。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖肉迫,靈堂內(nèi)的尸體忽然破棺而出验辞,到底是詐尸還是另有隱情,我是刑警寧澤喊衫,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布跌造,位于F島的核電站,受9級(jí)特大地震影響族购,放射性物質(zhì)發(fā)生泄漏壳贪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一联四、第九天 我趴在偏房一處隱蔽的房頂上張望撑碴。 院中可真熱鬧撑教,春花似錦朝墩、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至愤兵,卻和暖如春鹿霸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秆乳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工懦鼠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屹堰。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓肛冶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親扯键。 傳聞我的和親對(duì)象是個(gè)殘疾皇子睦袖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 初識(shí)RabbitMQ要說(shuō)RabbitMQ,我們不得不先說(shuō)下AMQP荣刑。AMQP馅笙,即Advanced Message ...
    Jackie_Zheng閱讀 722評(píng)論 0 3
  • 1,簡(jiǎn)單介紹與服務(wù)安裝 1.1厉亏,背景 在分布式系統(tǒng)中董习,我們廣泛運(yùn)用消息中間件進(jìn)行系統(tǒng)間的數(shù)據(jù)交換,便于異步解耦。現(xiàn)...
    紅薯愛(ài)帥閱讀 241評(píng)論 0 3
  • 關(guān)于消息隊(duì)列爱只,從前年開(kāi)始斷斷續(xù)續(xù)看了些資料阱飘,想寫(xiě)很久了,但一直沒(méi)騰出空,近來(lái)分別碰到幾個(gè)朋友聊這塊的技術(shù)選型沥匈,是時(shí)...
    預(yù)流閱讀 584,691評(píng)論 51 786
  • 整體架構(gòu) 部署步驟 基于 Docker 基本概念內(nèi)存節(jié)點(diǎn)只保存狀態(tài)到內(nèi)存蔗喂,例外情況是:持久的 queue 的內(nèi)容將...
    mvictor閱讀 12,756評(píng)論 5 30
  • hello world這句話(huà)對(duì)于我們學(xué)習(xí)通信技術(shù)的人來(lái)說(shuō)呢并不陌生,任何一個(gè)編程語(yǔ)言第一個(gè)程序都會(huì)是它高帖。 本周我們...
    好想吃薯愿閱讀 269評(píng)論 0 0