天天看點

面試官:RabbitMQ過期時間設定、死信隊列、延時隊列怎麼設計?

哈喽!大家好,我是小奇,一位不靠譜的程式員

小奇打算以輕松幽默的對話方式來分享一些技術,如果你覺得通過小奇的文章學到了東西,那就給小奇一個贊吧

文章持續更新,可以微信搜尋【小奇JAVA面試】第一時間閱讀,回複【資料】更有我為大家準備的福利喲!

文章目錄

  • ​​一、前言​​
  • ​​二、面試​​
  • ​​三、RabbitMQ發送消息長時間沒人處理過期怎麼辦?​​
  • ​​四、TTL是什麼?​​
  • ​​五、RabbitMQ延時隊列怎麼設計?​​
  • ​​六、總結​​

一、前言

RabbitMQ我們經常的使用,但是它有很多進階的特性我們也需要熟練的掌握才能應對現實場景中複雜的業務邏輯。

二、面試

面試官:小奇是吧,我們開始面試吧

我:快點吧,早就饑渴難耐了

面試官:RabbitMQ過期時間設定、死信隊列、延時隊列怎麼設計?

面試官:有用過RabbitMQ嗎

我:用過

三、RabbitMQ發送消息長時間沒人處理過期怎麼辦?

面試官:RabbitMQ發送消息長時間沒人處理過期怎麼辦?

我:消息長時間沒人處理過期了我們為了不影響正常的交換機使用,我們可以将過期的消息放到一個死信交換機中,然後這個交換機綁定一個隊列就是死信隊列,然後通過一個專門的消費者來處理這些過期的消息

面試官:RabbitMQ過期時間設定、死信隊列、延時隊列怎麼設計?

面試官:隻有消息到達過期時間沒有被消費會進入死信交換機嗎,還有其他的情況嗎

我:消息成為死信一共有三種情況。

1:隊列消息長度達到限制。

2:消費者拒收消息,并且不将消息放入原來的隊列中讓他重新發送。

3:原隊列存在消息過期設定,消息達到逾時時間未被消費。

面試官:我們怎麼定義一個死信交換機和死信隊列綁定呢?

我:我們可以通過x-dead-letter-exchange和x-dead-letter-routing-key兩個參數來配置好死信交換機的名稱,和死信交換機與死信隊列之間的路由鍵名稱。

面試官:RabbitMQ過期時間設定、死信隊列、延時隊列怎麼設計?

四、TTL是什麼?

面試官:TTL是什麼?

我:TTL全稱Time To Live(存活時間/過期時間),是mq中用來設定過期時間的。

面試官:我們一般怎麼設定過期時間,用哪些方式?

我:我們有兩種設定過期時間的方式,一個是對單個消息設定過期時間,一個是對一個隊列設定過期時間,這樣的話發送到隊列中的消息都遵循那個過期時間。

1:隊列設定過期時間:x-message-ttl,機關:ms(毫秒),這樣的話進入隊列的所有消息都遵循這個過期時間。

面試官:RabbitMQ過期時間設定、死信隊列、延時隊列怎麼設計?
2:單個消息設定過期時間:expiration,機關:ms(毫秒),這樣的話隻有這條消息有過期時間。
面試官:RabbitMQ過期時間設定、死信隊列、延時隊列怎麼設計?

面試官:那如果我即給單條消息設定了時間又給隊列設定了時間會怎麼樣?

我:那樣的話根據最短的那個時間來。

五、RabbitMQ延時隊列怎麼設計?

面試官:那你知道延時隊列嗎,一般都用來做什麼場景下的需求呢?

我:知道,延時隊列一般就是發送消息到MQ中後,消費者不要第一時間去處理,比如我們點外賣的時候我們下單成功了,這個時候庫存已經減了,但是我們還沒有支付,如果我們一直不支付的話,過30分鐘訂單就自動取消了,然後庫存又恢複了。

面試官:那RabbitMQ有延時隊列嗎,如果讓你自己設計一個延時隊列怎麼設計呢?

我:RabbitMQ中沒有提供延時隊列的功能,但是我們可以使用TTL+死信隊列來實作延時隊列的功能。

面試官:RabbitMQ過期時間設定、死信隊列、延時隊列怎麼設計?

面試官:可以呀小夥子,這塊掌握的不錯

我:還行還行,都是日常的積累

面試官:小夥子真厲害啊,RabbitMQ掌握的非常棒,你面試通過了,明天上崗吧

我:啊,這麼急嗎,我後面還有好多東西沒有講呢。

面試官:不着急,進來了以後慢慢聽你講,加班讓你跟我講

我:啊。。。這也太難了吧

六、總結

這裡關于RabbitMQ還沒有整理完畢,文章後面持續更新,建議收藏。

文章中涉及到的指令大家一定要像我一樣每個都敲幾遍,隻有在敲的過程中才能發現自己對指令是否真正的掌握了。

如果覺得我的文章還不錯的話就點個贊吧,另外可以微信搜尋【小奇JAVA面試】閱讀更多的好文章,擷取我為大家準備的資料。