RabbitMQ面試專題,面試必看
需要後續RabbitMQ面試題的點贊+關注,私信我獲取
1.RabbitMQ是什麼?
RabbitMQ是實現了高階訊息佇列協議(AMQP)的開源訊息代理軟體(亦稱面向訊息的中介軟體)。RabbitMQ伺服器是用Erlang語言編寫的,而群集和故障轉移是構建在開放電信平臺框架上的。所有主要的程式語言均有與代理介面通訊的客戶端庫。
2.RabbitMQ特點?
可靠性: RabbitMQ使用一些機制來保證可靠性, 如持久化、傳輸確認及釋出確認等。
靈活的路由 : 在訊息進入佇列之前,通過交換器來路由訊息。對於典型的路由功能, RabbitMQ 己經提供了一些內建的交換器來實現。針對更復雜的路由功能,可以將多個 交換器繫結在一起, 也可以通過外掛機制來實現自己的交換器。
擴充套件性: 多個RabbitMQ節點可以組成一個叢集,也可以根據實際業務情況動態地擴充套件 叢集中節點。
高可用性 : 佇列可以在叢集中的機器上設定映象,使得在部分節點出現問題的情況下隊 列仍然可用。
多種協議: RabbitMQ除了原生支援AMQP協議,還支援STOMP, MQTT等多種訊息 中介軟體協議。
多語言客戶端 :RabbitMQ 幾乎支援所有常用語言,比如 Java、 Python、 Ruby、 PHP、 C#、 JavaScript 等。
管理介面 : RabbitMQ 提供了一個易用的使用者介面,使得使用者可以監控和管理訊息、集 群中的節點等。
令外掛機制: RabbitMQ 提供了許多外掛 , 以實現從多方面進行擴充套件,當然也可以編寫自 己的外掛。
3.AMQP是什麼?
RabbitMQ就是 AMQP 協議的 Erlang 的實現(當然 RabbitMQ 還支援 STOMP2、 MQTT3 等協議 ) AMQP 的模型架構 和 RabbitMQ 的模型架構是一樣的,生產者將訊息傳送給交換器,交換器和佇列繫結 。
RabbitMQ 中的交換器、交換器型別、佇列、繫結、路由鍵等都是遵循的 AMQP 協議中相 應的概念。目前 RabbitMQ 最新版本預設支援的是 AMQP 0-9-1。
4.AMQP協議3層?
Module Layer:協議最高層,主要定義了一些客戶端呼叫的命令,客戶端可以用這些命令實現自己的業務邏輯。
Session Layer:中間層,主要負責客戶端命令傳送給伺服器,再將服務端應答返回客戶端,提供可靠性同步機制和錯誤處理。
TransportLayer:最底層,主要傳輸二進位制資料流,提供幀的處理、通道服用、錯誤檢測和資料表示等。
5.AMQP模型的幾大元件?
-
交換器 (Exchange):訊息代理伺服器中用於把訊息路由到佇列的元件。
-
佇列 (Queue):用來儲存訊息的資料結構,位於硬碟或記憶體中。
-
繫結 (Binding): 一套規則,告知交換器訊息應該將訊息投遞給哪個佇列。
6.生產者Producer?
訊息生產者,就是投遞訊息的一方。
訊息一般包含兩個部分:訊息體(payload)和標籤(Label)。
7.消費者Consumer?
消費訊息,也就是接收訊息的一方。
消費者連線到RabbitMQ伺服器,並訂閱到佇列上。消費訊息時只消費訊息體,丟棄標籤。
8.Broker服務節點?
Broker可以看做RabbitMQ的服務節點。一般請下一個Broker可以看做一個RabbitMQ伺服器。
9.Queue佇列?
Queue:RabbitMQ的內部物件,用於儲存訊息。多個消費者可以訂閱同一佇列,這時佇列中的訊息會被平攤(輪詢)給多個消費者進行處理。
10.Exchange交換器?
Exchange:生產者將訊息傳送到交換器,有交換器將訊息路由到一個或者多個佇列中。當路由不到時,或返回給生產者或直接丟棄。
11.RoutingKey路由鍵?
生產者將訊息傳送給交換器的時候,會指定一個RoutingKey,用來指定這個訊息的路由規則,這個RoutingKey需要與交換器型別和繫結鍵(BindingKey)聯合使用才能最終生效。
12.Binding繫結?
通過繫結將交換器和佇列關聯起來,一般會指定一個BindingKey,這樣RabbitMq就知道如何正確路由訊息到佇列了。
13.交換器4種型別?
主要有以下4種。
fanout:把所有傳送到該交換器的訊息路由到所有與該交換器繫結的佇列中。
direct:把訊息路由到BindingKey和RoutingKey完全匹配的佇列中。
topic:
匹配規則:
RoutingKey 為一個 點號'.': 分隔的字串。 比如: java.xiaoka.show
BindingKey和RoutingKey一樣也是點號“.“分隔的字串。
BindingKey可使用 * 和 # 用於做模糊匹配,*匹配一個單詞,#匹配多個或者0個
headers:不依賴路由鍵匹配規則路由訊息。是根據傳送訊息內容中的headers屬性進行匹配。效能差,基本用不到。
14.生產者訊息運轉?
1.Producer先連線到Broker,建立連線Connection,開啟一個通道(Channel)。
2.Producer宣告一個交換器並設定好相關屬性。
3.Producer宣告一個佇列並設定好相關屬性。
4.Producer通過路由鍵將交換器和佇列繫結起來。
5.Producer傳送訊息到Broker,其中包含路由鍵、交換器等資訊。
6.相應的交換器根據接收到的路由鍵查詢匹配的佇列。
7.如果找到,將訊息存入對應的佇列,如果沒有找到,會根據生產者的配置丟棄或者退回給生產者。
8.關閉通道。
9.管理連線。
15.消費者接收訊息過程?
1.Producer先連線到Broker,建立連線Connection,開啟一個通道(Channel)。
2.向Broker請求消費響應的佇列中訊息,可能會設定響應的回撥函式。
3.等待Broker回應並投遞相應佇列中的訊息,接收訊息。
4.消費者確認收到的訊息,ack。
5.RabbitMq從佇列中刪除已經確定的訊息。
6.關閉通道。
7.關閉連線。
16.交換器無法根據自身型別和路由鍵找到符合條件佇列時,有哪些處理?
mandatory :true 返回訊息給生產者。
mandatory: false 直接丟棄。
17.死信佇列?
DLX,全稱為 Dead-Letter-Exchange,死信交換器,死信郵箱。當訊息在一個佇列中變成死信 (dead message) 之後,它能被重新被髮送到另一個交換器中,這個交換器就是 DLX,繫結 DLX 的佇列就稱之為死信佇列。
18.導致的死信的幾種原因?
-
訊息被拒(Basic.Reject /Basic.Nack) 且 requeue = false。
-
訊息TTL過期。
-
佇列滿了,無法再新增。
19.延遲佇列?
儲存對應的延遲訊息,指當訊息被髮送以後,並不想讓消費者立刻拿到訊息,而是等待特定時間後,消費者才能拿到這個訊息進行消費。
20.優先順序佇列?
優先順序高的佇列會先被消費。
可以通過x-max-priority引數來實現。
當消費速度大於生產速度且Broker沒有堆積的情況下,優先順序顯得沒有意義。
21.事務機制?
RabbitMQ 客戶端中與事務機制相關的方法有三個:
channel.txSelect 用於將當前的通道設定成事務模式。
channel . txCommit 用於提交事務 。
channel . txRollback 用於事務回滾,如果在事務提交執行之前由於 RabbitMQ 異常崩潰或者其他原因丟擲異常,通過txRollback來回滾。
22.傳送確認機制?
生產者把通道設定為confirm確認模式,設定後,所有再改通道釋出的訊息都會被指定一個唯一的ID,一旦訊息被投遞到所有匹配的佇列之後,RabbitMQ就會傳送一個確認(Basic.Ack)給生產者(包含訊息的唯一ID),這樣生產者就知道訊息到達對應的目的地了。
23.消費者獲取訊息的方式?
-
推
-
拉
24.消費者某些原因無法處理當前接受的訊息如何來拒絕?
-
channel .basicNack
-
channel .basicReject
25.訊息傳輸保證層級?
At most once:最多一次。訊息可能會丟失,單不會重複傳輸。
At least once:最少一次。訊息覺不會丟失,但可能會重複傳輸。
Exactly once: 恰好一次,每條訊息肯定僅傳輸一次。
26.vhost?
每一個RabbitMQ伺服器都能建立虛擬的訊息伺服器,也叫虛擬主機(virtual host),簡稱vhost。
預設為“/”。
27.叢集中的節點型別?
記憶體節點:ram,將變更寫入記憶體。
磁碟節點:disc,磁碟寫入操作。
RabbitMQ要求最少有一個磁碟節點。
28.佇列結構?
通常由以下兩部分組成?
rabbit_amqqueue_process :負責協議相關的訊息處理,即接收生產者釋出的訊息、向消費者交付訊息、處理訊息的確認(包括生產端的 confirm 和消費端的 ack) 等。
backing_queue:是訊息儲存的具體形式和引擎,並向 rabbit amqqueue process 提供相關的介面以供呼叫。
29.RabbitMQ中訊息可能有的幾種狀態?
alpha: 訊息內容(包括訊息體、屬性和 headers) 和訊息索引都儲存在記憶體中 。
beta: 訊息內容儲存在磁碟中,訊息索引儲存在記憶體中。
gamma: 訊息內容儲存在磁碟中,訊息索引在磁碟和記憶體中都有 。
delta: 訊息內容和索引都在磁碟中 。
相關文章
- Python面試50題!面試鞏固必看!【轉】Python面試
- defer問題——面試Go必看面試Go
- Java高頻面試題---RabbitMQJava面試題MQ
- RabbitMq面試問題總結MQ面試
- RabbitMQ/高併發面試題MQ面試題
- java面試題-大學畢業必看Java面試題
- 百度搜尋 “Java面試題” 前200頁(面試必看)Java面試題
- 面試題:面試經面試題
- 2019 必看 Android 高階面試題總結Android面試題
- 必看Android500道高薪面試題集Android高薪面試題
- 資料庫面試題(開發者必看)資料庫面試題
- java面試題大合集(開發者必看)Java面試題
- HTML最新面試題(筆試面試題)HTML面試題筆試
- 技術乾貨:RabbitMQ面試題及答案MQ面試題
- 技術面試題分享:含答案的10道Jvm面試專題面試題JVM
- 「面試題」20+Vue面試題整理面試題Vue
- 面試測試題面試
- 測試面試題面試題
- Python工程師必看的面試問題與解答(中)Python工程師面試
- Hadoop大資料面試題全版本,必看跳槽指南!Hadoop大資料面試題
- 面試題面試題
- 【面試】面試常見問題整理面試
- 【Java面試】JSP常見面試題!JavaJS面試題
- 【Java面試】Servlet常見面試題!JavaServlet面試題
- 【Java面試】 Javascript常見面試題!JavaScript面試題
- [面試專題]JS設計模式面試JS設計模式
- 2018面試——2.Mysql專題面試MySql
- web專案常問面試題Web面試題
- MongoDB面試專題33道解析MongoDB面試
- react面試題 機試題React面試題
- 面試官:RabbitMQ有哪些工作模式?面試MQ模式
- [面試專題]一線網際網路大廠面試總結面試
- 2020Java實習必看面試兩百題解析 (下)Java面試
- Web前端開發必看的100道大廠面試題Web前端面試題
- 【面試】前端面試題前端面試題
- 效能測試面試題面試題
- Python 筆試 面試題Python筆試面試題
- 上週剛面試回來後的面試總結,想進BAT必看面試BAT