Rabbit 進階操作
過期時間TTL表示可以對消息設定預期的時間,在這個時間内都可以被消費者接收擷取;過了時間之後消息将自動被删除。
RabbitMQ可以對消息和隊列設定TTL。目前有兩種方法可以設定。
第一種方法是通過隊列屬性設定,隊列中所有消息都有相同的過期時間。
第二種方法是對消息進行單獨設定,每條消息TTL可以不同。
如果上述兩種方法同時使用,則消息的過期時間以兩者之間TTL較小的那個數值為準。消息在隊列的生存時間一旦超過設定的TTL值,就稱為dead message被投遞到死信隊列, 消費者将無法再收到該消息。
運作之後,可以進入網站中檢視該隊列:
剛運作時:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iMyIDN2MDO4MmYyAzYlRDOxYzXyAjMzYTM1AzLcFTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL5M3Lc9CX6MHc0RHaiojIsJye.png)
運作6s後:
這樣可以給這條<code>message</code> 設定過期時間,如果上述兩種方法同時使用,則消息的過期時間以兩者之間TTL較小的那個數值為準。是以會 <code>5s</code> 過期。
DLX,全稱為Dead-Letter-Exchange , 可以稱之為死信交換機,也有人稱之為死信郵箱。當消息在一個隊列中變成死信(dead message)之後,它能被重新發送到另一個交換機中,這個交換機就是DLX ,綁定DLX的隊列就稱之為死信隊列。
消息變成死信,可能是由于以下的原因:
消息被拒絕
消息過期
隊列達到最大長度
DLX也是一個正常的交換機,和一般的交換機沒有差別,它能在任何的隊列上被指定,實際上就是設定某一個隊列的屬性。當這個隊列中存在死信時,Rabbitmq就會自動地将這個消息重新釋出到設定的DLX上去,進而被路由到另一個隊列,即死信隊列。
要想使用死信隊列,隻需要在定義隊列的時候設定隊列參數 <code>x-dead-letter-exchange</code> 指定交換機即可。
6s之後:
發送了三條資訊,而設定的消息隊列長度為<code>2</code>,這樣最先發送的<code>第1個消息</code>會進入死信隊列:
延遲隊列存儲的對象是對應的延遲消息;所謂“延遲消息” 是指當消息被發送以後,并不想讓消費者立刻拿到消息,而是等待特定時間後,消費者才能拿到這個消息進行消費。在RabbitMQ中延遲隊列可以通過 <code>過期時間</code> + <code>死信隊列</code> 來實作;
先啟動 <code>消費者</code> ,開啟監聽,在啟動 <code>生産者</code> 發送消息。
這時候可能出現錯誤:
這個問題是因為你建立的交換機已經存在,可以去rabbitmq網站中,删除對應交換機。
再次運作就成功了: