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