主頁 >  其他 > Java面試——RabbitMQ系列總結

Java面試——RabbitMQ系列總結

2021-10-24 08:56:58 其他

文章目錄:

1.RabbitMQ是什么?

2.為什么要使用訊息佇列?

3.說說RabbitMQ中的幾大組件

4.訊息佇列有什么優缺點?

5.如何保證訊息的可靠性?

6.RabbitMQ中常見交換機型別有哪些?

7.生產者發送訊息的程序是怎樣的?

8.消費者接收訊息的程序是怎樣的?

9.交換機無法根據自身型別和路由鍵找到符合條件佇列時,有哪些處理方法?

10.什么是死信佇列?導致死信的原因有哪些?

11.什么是延遲佇列?使用場景有哪些?

12.什么是優先級佇列?

13.RabbitMQ中的事務機制?

14.RabbitMQ中的發送確認機制?

15.如何保證RabbitMQ訊息佇列的高可用?


1.RabbitMQ是什么?

RabbitMQ是一款開源的,Erlang撰寫的,基于AMQP(高級訊息佇列協議)協議的訊息中間件,

2.為什么要使用訊息佇列?

從本質上來說是因為互聯網的快速發展,業務不斷擴張,促使技術架構需要不斷的演進,

從以前的單體架構到現在的微服務架構,成百上千的服務之間相互呼叫和依賴,從互聯網初期一個服務器上有 100 個在線用戶已經很了不得,到現在坐擁10億榷訓的微信,此時,我們需要有一個「工具」來解耦服務之間的關系、控制資源合理合時的使用以及緩沖流量洪峰等等,因此,訊息佇列就應運而生了,

它常用來實作:異步處理服務解耦流量控制(削峰)

3.說說RabbitMQ中的幾大組件

  • Broker:接收和分發訊息的應用,RabbitMQ Server 就是 Message Broker,
  • Virtual host:出于多租戶和安全因素設計的,把 AMQP 的基本組件劃分到一個虛擬的分組中,類似于網路中的 namespace 概念,當多個不同的用戶使用同一個 RabbitMQ server 提供的服務時,可以劃分出多個 vhost,每個用戶在自己的 vhost 創建 exchange/queue 等,
  • Connection:publisher/consumer 和 broker 之間的 TCP 連接Channel:如果每一次訪問 RabbitMQ 都建立一個 Connection,在訊息量大的時候建立 TCP Connection 的開銷將是巨大的,效率也較低,Channel 是在 connection 內部建立的邏輯連接,如果應用程式支持多執行緒,通常每個 thread 創建單獨的 channel 進行通訊,AMQP method 包含了 channel id 幫助客戶端和 message broker 識別 channel,所以 channel 之間是完全隔離的, l Channel 作為輕量級的Connection 極大減少了作業系統建立 TCP connection 的開銷,
  • Exchange : message 到達 broker 的第一站,根據分發規則,匹配查詢表中的 routing key,分發訊息到 queue 中去,常用的型別有:direct (point-to-point), topic (publish-subscribe) and fanout(multicast),
  • Queue : 訊息最終被送到這里等待 consumer 取走,
  • Binding : exchange 和 queue 之間的虛擬連接,binding 中可以包含 routing key,Binding 資訊被保存到 exchange 中的查詢表中,用于 message 的分發依據,
  • Producer:訊息生產者,就是投遞訊息的一方,訊息一般包含兩個部分:訊息體(payload)和標簽(Label),
  • Consumer:消費訊息,也就是接收訊息的一方,消費者連接到RabbitMQ服務器,并訂閱到佇列上,消費訊息時只消費訊息體,丟棄標簽,

4.訊息佇列有什么優缺點?

優點上面已經說了,就是在特殊場景下有其對應的好處,解耦、異步、削峰,缺點有以下幾個:

  • 系統可用性降低:系統引入的外部依賴越多,越容易掛掉,萬一 MQ 掛了,MQ 一掛,整套系統崩 潰,你不就完了?

  • 系統復雜度提高:硬生生加個 MQ 進來,你怎么保證訊息沒有重復消費?怎么處理訊息丟失的情況?

  • 怎么保證訊息傳遞的順序性?問題一大堆,

  • 一致性問題:A 系統處理完了直接回傳成功了,人都以為你這個請求就成功了;但是問題是,要是 BCD 三個系統那里,BD 兩個系統寫庫成功了,結果 C 系統寫庫失敗了,咋整?你這資料就不一致 了,

5.如何保證訊息的可靠性?

訊息到MQ的程序中搞丟,MQ自己搞丟,MQ到消費程序中搞丟,

生產者到RabbitMQ:事務機制和Confirm機制,注意:事務機制和 Confirm 機制是互斥的,兩者不能共存,會導致 RabbitMQ 報錯,

RabbitMQ自身:持久化、集群、普通模式、鏡像模式,

RabbitMQ到消費者:basicAck機制、死信佇列、訊息補償機制,

6.RabbitMQ中常見交換機型別有哪些?

  • fanout:把所有發送到該交換器的訊息路由到所有與該交換器系結的佇列中,

  • direct:把訊息路由到BindingKey和RoutingKey完全匹配的佇列中,

  • topic:

RoutingKey 為一個 點號'.': 分隔的字串,比如: szh.name.love

BindingKeyRoutingKey一樣也是點號“.“分隔的字串,

BindingKey可使用 * 和 # 用于做模糊匹配,*匹配一個單詞,#匹配多個或者0個

7.生產者發送訊息的程序是怎樣的?

  1. Producer先連接到Broker,建立連接Connection,開啟一個信道(Channel),
  2. Producer宣告一個交換器并設定好相關屬性,
  3. Producer宣告一個佇列并設定好相關屬性,
  4. Producer通過路由鍵將交換器和佇列系結起來,
  5. Producer發送訊息到Broker,其中包含路由鍵、交換器等資訊,
  6. 相應的交換器根據接收到的路由鍵查找匹配的佇列,
  7. 如果找到,將訊息存入對應的佇列,如果沒有找到,會根據生產者的配置丟棄或者退回給生產者,
  8. 關閉信道,關閉連接,

8.消費者接收訊息的程序是怎樣的?

  1. Producer先連接到Broker,建立連接Connection,開啟一個信道(Channel),
  2. Broker請求消費回應的佇列中的訊息,可能會設定回應的回呼函式,
  3. 等待Broker回應并投遞相應佇列中的訊息,接收訊息,
  4. 消費者確認收到的訊息,ack
  5. RabbitMQ從佇列中洗掉已經確定的訊息,
  6. 關閉信道,關閉連接,

9.交換機無法根據自身型別和路由鍵找到符合條件佇列時,有哪些處理方法?

  • mandatory :true 回傳訊息給生產者,

  • mandatory : false 直接丟棄,

10.什么是死信佇列?導致死信的原因有哪些?

死信,DLX,全稱為 Dead-Letter-Exchange,死信交換器,死信郵箱,顧名思義就是無法被消費的訊息,一般來說,producer 將訊息投遞到 broker 或者直接到 queue 里了,consumer 從 queue 取出訊息進行消費,但某些時候由于特定的原因導致 queue 中的某些訊息無法被消費,這樣的訊息如果沒有后續的處理,就變成了死信,有死信自然就有了死信佇列,

  • 訊息 TTL 過期
  • 佇列達到最大長度 (佇列滿了,無法再添加資料到 mq 中)
  • 訊息被拒絕 (basic.reject 或 basic.nack) 并且 requeue=false.

11.什么是延遲佇列?使用場景有哪些?

存盤對應的延遲訊息,指當訊息被發送以后,并不想讓消費者立刻拿到訊息,而是等待特定時間后,消費者才能拿到這個訊息進行消費,

  1. 訂單在十分鐘之內未支付則自動取消,
  2. 新創建的店鋪,如果在十天內都沒有上傳過商品,則自動發送訊息提醒,
  3. 用戶注冊成功后,如果三天內沒有登陸則進行短信提醒,
  4. 用戶發起退款,如果三天內沒有得到處理則通知相關運營人員,
  5. 預定會議后,需要在預定的時間點前十分鐘通知各個與會人員參加會議

12.什么是優先級佇列?

  • 優先級高的佇列會先被消費,

  • 可以通過 x-max-priority 引數來實作,

  • 當消費速度大于生產速度且Broker沒有堆積的情況下,優先級顯得沒有意義,

13.RabbitMQ中的事務機制?

RabbitMQ 客戶端中與事務機制相關的方法有三個:

channel.txSelect 用于將當前的信道設定成事務模式,

channel.txCommit 用于提交事務 ,

channel.txRollback 用于事務回滾,如果在事務提交執行之前由于 RabbitMQ 例外崩潰或者其他原因拋出例外,通過txRollback來回滾,

14.RabbitMQ中的發送確認機制?

生產者將信道設定成 confirm 模式,一旦信道進入 confirm 模式, 所有在該信道上面發布的訊息都將會被指派一個唯一的 ID(從 1 開始),一旦訊息被投遞到所有匹配的佇列之后,broker就會發送一個確認給生產者(包含訊息的唯一 ID),這就使得生產者知道訊息已經正確到達目的佇列了,

15.如何保證RabbitMQ訊息佇列的高可用?

RabbitMQ 有三種模式:單機模式普通集群模式鏡像集群模式

單機模式:就是demo級別的,一般就是你本地啟動了玩玩兒的,沒人生產用單機模式

普通集群模式:意思就是在多臺機器上啟動多個RabbitMQ實體,每個機器啟動一個,

鏡像集群模式:這種模式,才是所謂的RabbitMQ的高可用模式,跟普通集群模式不一樣的是,你創建的queue,無論元資料(元資料指RabbitMQ的配置資料)還是queue里的訊息都會存在于多個實體上,然后每次你寫訊息到queue的時候,都會自動把訊息到多個實體的queue里進行訊息同步,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333625.html

標籤:其他

上一篇:訊息中間件MQ及ActiveMQ介紹

下一篇:【ZooKeeper】Curator API介紹及基本使用

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more