更新時間:2022-12-14 15:49:25 來源:動力節點 瀏覽1643次
現在想要進入到一些互聯網企業中,都需要掌握java消息隊列的技能,其原因就是由于目前的用戶量逐漸擴大,對于一些電商的企業來說遇到秒殺、搶票等高頻業務時,服務器幾乎是扛不住大量QPS,因此,就需要引入消息列隊來進行優化,所以,熟知相關的面試題,對未來的面試有著決定性的幫助:
1.消息隊列的應用場景有哪些?
答:消息隊列的應用場景如下。
應用解耦,比如,用戶下單后,訂單系統需要通知庫存系統,假如庫存系統無法訪問,則訂單減庫存將失敗,從而導致訂單失敗。訂單系統與庫存系統耦合,這個時候如果使用消息隊列,可以返回給用戶成功,先把消息持久化,等庫存系統恢復后,就可以正常消費減去庫存了。
削峰填谷,比如,秒殺活動,一般會因為流量過大,從而導致流量暴增,應用掛掉,這個時候加上消息隊列,服務器接收到用戶的請求后,首先寫入消息隊列,假如消息隊列長度超過最大數量,則直接拋棄用戶請求或跳轉到錯誤頁面。
日志系統,比如,客戶端負責將日志采集,然后定時寫入消息隊列,消息隊列再統一將日志數據存儲和轉發。
2.RabbitMQ 有哪些優點?
答:RabbitMQ 的優點如下:
可靠性,RabbitMQ 的持久化支持,保證了消息的穩定性;
高并發,RabbitMQ 使用了 Erlang 開發語言,Erlang 是為電話交換機開發的語言,天生自帶高并發光環和高可用特性;
集群部署簡單,正是因為 Erlang 使得 RabbitMQ 集群部署變的非常簡單;
社區活躍度高,因為 RabbitMQ 應用比較廣泛,所以社區的活躍度也很高;
解決問題成本低,因為資料比較多,所以解決問題的成本也很低;
支持多種語言,主流的編程語言都支持,如 Java、.NET、PHP、Python、JavaScript、Ruby、Go 等;
插件多方便使用,如網頁控制臺消息管理插件、消息延遲插件等。
3.RabbitMQ 有哪些重要的角色?
答:RabbitMQ 包含以下三個重要的角色:
生產者:消息的創建者,負責創建和推送數據到消息服務器;
消費者:消息的接收方,用于處理數據和確認消息;
代理:就是 RabbitMQ 本身,用于扮演“快遞”的角色,本身不生產消息,只是扮演“快遞”的角色。
4.RabbitMQ 有哪些重要的組件?它們有什么作用?
答:RabbitMQ 包含的重要組件有:ConnectionFactory(連接管理器)、Channel(信道)、Exchange(交換器)、Queue(隊列)、RoutingKey(路由鍵)、BindingKey(綁定鍵) 等重要的組件,它們的作用如下:
ConnectionFactory(連接管理器):應用程序與 RabbitMQ 之間建立連接的管理器,程序代碼中使用;
Channel(信道):消息推送使用的通道;
Exchange(交換器):用于接受、分配消息;
Queue(隊列):用于存儲生產者的消息;
RoutingKey(路由鍵):用于把生成者的數據分配到交換器上;
BindingKey(綁定鍵):用于把交換器的消息綁定到隊列上。
運行流程,如下圖所示:
5.什么是消息持久化?
答:消息持久化是把消息保存到物理介質上,以防止消息的丟失。
6.RabbitMQ 要實現消息持久化,需要滿足哪些條件?
答:RabbitMQ 要實現消息持久化,必須滿足以下 4 個條件:
投遞消息的時候 durable 設置為 true,消息持久化,代碼:channel.queueDeclare(x, true, false, false, null),參數 2 設置為 true 持久化;
設置投遞模式 deliveryMode 設置為 2(持久),代碼:channel.basicPublish(x, x, MessageProperties.PERSISTENT TEXT PLAIN,x),參數 3 設置為存儲純文本到磁盤;
消息已經到達持久化交換器上;
消息已經到達持久化的隊列。
以上就是“2023的Java消息隊列面試題,需要我們熟知”,你能回答上來嗎?如果想要了解更多的Java面試題相關內容,可以關注動力節點Java官網。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習