技術乾貨:RabbitMQ面試題及答案
RabbitMQ作為目前應用相當廣泛的訊息中介軟體,在企業級應用、微服務應用中充當著重要的角色,特別是在一些典型的應用場景以及業務模組中具有重要的作用。
比如業務服務模組解耦,非同步通訊,高併發限流,超時延遲處理等均有廣泛的應用!同時也是中高階Java工程師面試常問到的一個知識點,在這 陝西優就業整理了一些準備好答案的面試題,分享給大家!
推薦閱讀
【技術乾貨】
http://blog.itpub.net/69902581/viewspace-2672371/
一、什麼是RabbitMQ?
採用AMQP高階訊息佇列協議的一種訊息佇列技術,最大的特點就是消費並不需要確保提供方存在,實現了服務之間的高度解耦。
二、為什麼要使用RabbitMQ?
①在分散式系統下具備非同步,削峰,負載均衡等一系列高階功能;
②擁有持久化的機制,程式訊息,佇列中的資訊也可以儲存下來。
③實現消費者和生產者之間的解耦。
④對於高併發場景下,利用訊息佇列可以使得同步訪問變為序列訪問達到一定量的限流,利於資料庫的操作。
⑤可以使用訊息佇列達到非同步下單的效果,排隊中,後臺進行邏輯下單。
三、RabbitMQ的使用場景有哪些?
①跨系統的非同步通訊,所有需要非同步互動的地方都可以使用訊息佇列。就像我們除了打電話(同步)以外,還需要發簡訊,發電子郵件(非同步)的通訊方式。
②多個應用之間的耦合,由於訊息是平臺無關和語言無關的,而且語義上也不再是函式呼叫,因此更適合作為多個應用之間的松耦合的介面。基於訊息佇列的耦合,不需要傳送方和接收方同時線上。在企業應用整合(EAI)中,檔案傳輸,共享資料庫,訊息佇列,遠端過程呼叫都可以作為整合的方法。
③應用內的同步變非同步,比如訂單處理,就可以由前端應用將訂單資訊放到佇列,後端應用從佇列裡依次獲得訊息處理,高峰時的大量訂單可以積壓在佇列裡慢慢處理掉。由於同步通常意味著阻塞,而大量執行緒的阻塞會降低計算機的效能。
④訊息驅動的架構(EDA),系統分解為訊息佇列,和訊息製造者和訊息消費者,一個處理流程可以根據需要拆成多個階段(Stage),階段之間用佇列連線起來,前一個階段處理的結果放入佇列,後一個階段從佇列中獲取訊息繼續處理。
⑤應用需要更靈活的耦合方式,如釋出訂閱,比如可以指定路由規則。
⑥跨區域網,甚至跨城市的通訊(CDN行業),比如北京機房與廣州機房的應用程式的通訊。
四、RabbitMQ有哪些重要的角色?
RabbitMQ中重要的角色有:生產者、消費者和代理:
①生產者:訊息的建立者,負責建立和推送資料到訊息伺服器;
②消費者:訊息的接收方,用於處理資料和確認訊息;
③代理:就是RabbitMQ本身,用於扮演“快遞”的角色,本身不生產訊息,只是扮演“快遞”的角色。
五、如何確保訊息正確地傳送至RabbitMQ?如何確保訊息接收方消費了訊息?
1、傳送方確認模式
①將通道設定成confirm模式(傳送方確認模式),則所有在通道上釋出的訊息都會被指派一個唯一的ID。
②一旦訊息被投遞到目的佇列後,或者訊息被寫入磁碟後(可持久化的訊息),通道會傳送一個確認給生產者(包含訊息唯一 ID)。
③如果RabbitMQ發生內部錯誤從而導致訊息丟失,會傳送一條 nack(notacknowledged,未確認)訊息。
④傳送方確認模式是非同步的,生產者應用程式在等待確認的同時,可以繼續傳送訊息。當確認訊息到達生產者應用程式,生產者應用程式的回撥方法就會被觸發來處理確認訊息。
2、接收方確認機制
①消費者接收每一條訊息後都必須進行確認(訊息接收和訊息確認是兩個不同操作)。只有消費者確認了訊息,RabbitMQ 才能安全地把訊息從佇列中刪除。
②這裡並沒有用到超時機制,RabbitMQ僅透過Consumer的連線中斷來確認是否需要重新傳送訊息。也就是說,只要連線不中斷,RabbitMQ給了Consumer足夠長的時間來處理訊息。保證資料的最終一致性。
3、下面羅列幾種特殊情況
①如果消費者接收到訊息,在確認之前斷開了連線或取消訂閱,RabbitMQ會認為訊息沒有被分發,然後重新分發給下一個訂閱的消費者。(可能存在訊息重複消費的隱患,需要去重)
②如果消費者接收到訊息卻沒有確認訊息,連線也未斷開,則RabbitMQ認為該消費者繁忙,將不會給該消費者分發更多的訊息。
六、RabbitMQ怎麼避免訊息丟失?
①訊息持久化;
②ACK確認機制;
③設定叢集映象模式;
④訊息補償機制。
七、要保證訊息持久化成功的條件有哪些?
①宣告佇列必須設定持久化durable設定為 true。
②訊息推送投遞模式必須設定持久化,deliveryMode設定為2(持久)。
③訊息已經到達持久化交換器。
④訊息已經到達持久化佇列。
以上四個條件都滿足才能保證訊息持久化成功。
八、RabbitMQ持久化有什麼缺點?
持久化的缺地就是降低了伺服器的吞吐量,因為使用的是磁碟而非記憶體儲存,從而降低了吞吐量。可儘量使用ssd硬碟來緩解吞吐量的問題。
九、RabbitMQ 有幾種廣播型別?
三種廣播模式:
①fanout:所有bind到此exchange的queue都可以接收訊息(純廣播,繫結到RabbitMQ的接受者都能收到訊息);
②direct:透過routingKey和exchange決定的那個唯一的queue可以接收訊息;
③topic:所有符合routingKey(此時可以是一個表示式)的routingKey所bind的queue可以接收訊息;
十、RabbitMQ中vhost的作用是什麼?
vhost可以理解為虛擬broker ,即mini-RabbitMQ server。其內部均含有獨立的 queue、exchange和binding等,但最最重要的是,其擁有獨立的許可權系統,可以做到 vhost 範圍的使用者控制。當然,從RabbitMQ的全域性角度,vhost可以作為不同許可權隔離的手段(一個典型的例子就是不同的應用可以跑在不同的vhost中)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69902581/viewspace-2673724/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 技術乾貨:ActiveMQ面試題及答案MQ面試題
- 技術乾貨:Hadoop面試題及答案Hadoop面試題
- 技術乾貨:spring boot面試題及答案Spring Boot面試題
- 技術乾貨:Tomcat面試題彙總及答案Tomcat面試題
- 技術乾貨:Kotlin面試題彙總及答案Kotlin面試題
- 技術乾貨:spring cloud面試題彙總及答案SpringCloud面試題
- 技術乾貨:Kubernetes面試題彙總及答案面試題
- 技術乾貨:關於效能測試面試題及答案面試題
- 技術乾貨:ASP.net mvc面試32題附答案ASP.NETMVC面試
- 12個iOS技術面試題及答案總結iOS面試題
- 乾貨來臨:C語言面試54題附答案C語言面試
- Java開發基礎常見面試題及答案彙總(實用乾貨!)Java面試題
- PHPer 面試可能會遇到的問題及答案 | 掘金技術徵文PHP面試
- 技術乾貨收集
- JS面試題及答案JS面試題
- 2017前端面試題及答案總結|掘金技術徵文前端面試題
- Android 面試題(附答案) | 掘金技術徵文Android面試題
- 技術面試題分享:含答案的10道Jvm面試專題面試題JVM
- struts面試題及答案【重要】面試題
- Oracle面試試題及答案Oracle面試
- 前端面試題乾貨集合前端面試題
- 阿里技術精華乾貨整理阿里
- 常見AI面試題及答案AI面試題
- 30 道 Dubbo 面試題及答案面試題
- Java初中級面試題及答案Java面試題
- 碼農面試智力題及答案面試
- Java高階面試題及答案Java面試題
- SQL經典面試題及答案SQL面試題
- c#面試題及答案(二)C#面試題
- Oracle 面試英文題目及答案Oracle面試
- (轉)ABAP 面試問題及答案面試
- 面試題:web程式設計技術考試題庫(含答案)面試題Web程式設計
- 10道Python常見面試題及答案,快來測測你的技術!Python面試題
- 程式設計師面試備戰篇:18個經典MySQL面試專題解析(乾貨分享答案)程式設計師面試MySql
- 技術乾貨 | WebRTC 技術解析之 Android VDMWebAndroid
- 技術乾貨:LeetCode1- 20題詳解LeetCode
- 阿里Jvm必問面試題及答案阿里JVM面試題
- 面試題及相關參考答案面試題