您好,登錄后才能下訂單哦!
本篇內容介紹了“EMQ X MQTT 5.0服務器的保留消息與消息過期間隔怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
服務端收到 Retain 標志為 1 的 PUBLISH 報文時,會將該報文視為保留消息,除了被正常轉發以外,保留消息會被存儲在服務端,每個主題下只能存在一份保留消息,因此如果已經存在相同主題的保留消息,則該保留消息被替換。
當客戶端建立訂閱時,如果服務端存在主題匹配的保留消息,則這些保留消息將被立即發送給該客戶端。借助保留消息,新的訂閱者能夠立即獲取最近的狀態,而不需要等待無法預期的時間,這在很多場景下非常重要的。
保留消息雖然存儲在服務端中,但它并不屬于會話的一部分。也就是說,即便發布這個保留消息的會話終結,保留消息也不會被刪除。刪除保留消息只有兩種方式:
客戶端往某個主題發送一個 Payload 為空的保留消息,服務端就會刪除這個主題下的保留消息。
如果包含保留消息的 PUBLISH 報文設置了消息過期間隔屬性,那么保留消息在服務端存儲超過過期時間后就會被刪除。
PUBLISH 報文可以設置消息過期間隔這一屬性,消息過期間隔是一個四字節的整數,表示應用消息的生命周期,單位是秒。
如果 PUBLISH 報文不設置消息過期間隔,那么應用消息不會過期。
如果 PUBLISH 報文設置了消息過期間隔,并且消息過期將已經過期,服務端還沒開始向匹配的訂閱者交付該消息,那么服務端必須刪除該消息。
EMQ X MQTT Broker 的保留消息功能是由 emqx_retainer
插件實現,該插件默認開啟,通過修改 emqx_retainer
插件的配置,可以調整 EMQ X Broker 儲存保留消息的位置,限制接收保留消息數量和 Payload 最大長度,以及調整保留消息的過期時間。
emqx_retainer
插件默認開啟,插件的配置路徑為 etc/plugins/emqx_retainer.conf
。
retainer.storage_type
保留消息的儲存位置,EMQ X Broker 可以選擇將保留消息僅儲存在內存中,僅儲存在硬盤中,或是同時儲存在內存和硬盤中,可以由用戶的業務特點靈活決定。
例如,想要收集電表讀數的用戶可能會決定使用 QoS 等級 1 的消息,因為他們不能接受數據在網絡傳輸途中丟失,但是,他們可能認為客戶端和服務端的數據可以存儲在內存(易失性存儲器)中,因為電力供應系統是非常可靠的,不會有太大的數據丟失風險。
與之相反,停車計費支付應用的提供商可能決定任何情況下都不能讓數據支付消息丟失,因此他們要求在通過網絡傳輸之前將所有的數據寫入到硬盤中(非易失性存儲器)。
retainer.max_retained_messages、retainer.max_payload_size
retainer.max_retained_messages
規定了 EMQ X Broker 可以儲存的保留消息的最大數量,0 表示沒有限制。保留消息數量超出最大值限制后,可以替換已存在的保留消息,但不能為新的主題儲存保留消息。
retainer.max_payload_size
規定了 EMQ X Broker 可以接收的保留消息的最大 Payload 值。Payload 大小超出最大值后 EMQ X 消息服務器會把收到的保留消息作為普通消息處理,不再儲存此消息。
這兩項配置規定了 EMQ X Broker 可以接收與儲存的保留消息的上限,保證了 EMQ X Broker 不會占用過多的資源來儲存和處理保留消息。
retainer.expiry_interval
保留消息的過期時間,0 表示永不過期。如果 PUBLISH 報文中設置了消息過期間隔,那么以 PUBLISH 報文中的消息過期間隔為準。
當保留消息的過期后,EMQ X Broker 會刪除掉此消息。
“EMQ X MQTT 5.0服務器的保留消息與消息過期間隔怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。