您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關RabbitMQ的面試題有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
一、什么是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中)。
關于“RabbitMQ的面試題有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。