RabbitMQ(三) -- TTL、MaxLength、Priority、DeadLetter

一:隊列創建

在這裏插入圖片描述

1.1 隊列名稱

消息生產目的在於消費,消費時需要知曉隊列名稱確定唯一隊列。創建隊列時可以由系統生成隊列名稱亦或是自定義名稱兩種方式
在這裏插入圖片描述

1.2 隊列持久化

RabbitMQ第一篇文章中詳細解釋過隊列持久化操作,自定義隊列名稱生成隊列時第二個參數durable即表示隊列持久化,當隊列設定爲持久化後RabbitMQ服務重啓隊列也不會刪除

1.3 獨佔隊列

第三個參數exclusive表示隊列獨佔,獨佔含義在於只有創建隊列的鏈接才能操作該隊列。且當該鏈接Connection銷燬關閉時獨佔隊列自動刪除

1.4 自動刪除隊列

第四個參數autoDelete表示該隊列是否自動刪除,觸發時間爲隊列沒有消費者活動。但是有一點需要記住若隊列創建後沒有消費者進行消費,該自動刪除隊列不會被刪除。若使用basicGet()拉取消息也不會觸發自動刪除機制

二:隊列自動過期

首先聲明接下來的配置方案基本都有代碼中配置以及使用服務策略實現,但是個人理解代碼中定義實現更加直觀,但是官網更推薦使用策略實現。具體信息可以查看官網,接下來統一介紹代碼定義實現
在這裏插入圖片描述

2.1 單消息TTL

隊列中存儲成千上萬消息,在學習隊列TTL前先看一下隊列中某消息TTL設置。如下所示,定義某消息TTL通過BasicProperties設置expiration屬性完成,參數單位ms
在這裏插入圖片描述

2.2 隊列消息TTL

某隊列中數據正常情況下都可以說是一類數據,所以RabbitMQ支持將整個隊列中消息設定TTL時間。當然這裏就需要藉助於自定義隊列時第五個參數,該參數爲map集合。map集合中通過KV鍵值對方式設置某些屬性,其中隊列消息TTL使用屬性x-message-ttl,單位ms
在這裏插入圖片描述

2.3 隊列TTL

隊列中消息可以設定固定過期時限,那麼作爲消息載體的隊列也可以設定過期時限。隊列TTL含義爲當某個未進行操作一定時長後刪除,可以與autoDelete配合使用。隊列TTL實現參數x-expires,單位ms
在這裏插入圖片描述

三:隊列優先級

隊列中可能某些消息需要優先被消費,RabbitMQ支持設定隊列中消息優先級。優先級隊列實現分爲兩部分:

  • 自定義構造隊列時需要使用參數x-max-priority限定最大優先級,該參數值最大255,建議1-10即可
  • 投遞消息時指定該消息優先級通過BasicProperties設置priority屬性實現
    在這裏插入圖片描述

四:隊列長度限制

隊列中可以限制消息的數量以及消息總計佔用內存空間數量。自定義隊列時使用參數x-max-lengthx-max-length-bytes即可,若兩者同時設定皆有效。當超過設定數值時有兩種策略提供,默認策略爲刪除隊列頭部消息drop-head。除默認策略外還提供reject-publish策略拒絕新消息接收,策略制定使用參數x-overflow實現
在這裏插入圖片描述

五:死亡轉發

當發生以下三種情況導致消息被刪除的時候可以將消息路由轉發到設定的交換器,通過路由到其它隊列中,這種操作稱之爲死亡轉發:

  • 客戶端basicReject()、basicNack()拒絕的消息,並且參數requeue設置爲false
  • 每消息TTL到期刪除的消息,必須是通過指定單消息過期而刪除的消息才符合
  • 隊列限長策略而刪除消息,注意這裏只能是默認策略drop-head才符合

轉發到的轉發器通過參數x-dead-letter-exchange設定,當未指定routingKey時將會使用消息原routingKey,若通過參數x-dead-letter-routing-key指定後則使用該指定參數值。當然交換器類型若爲fanout則無需routingKey
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章