??通過持久化可以盡量防止在RabbitMQ異常情況下(重啟、關(guān)閉、宕機)的數(shù)據(jù)丟失。持久化技術(shù)是解決消息存儲到隊列后的丟失問題,但是通過持久化并不能完全保證消息不丟失。
??持久化技術(shù)可以分為交換機持久化、隊列持久化以及消息持久化,它們的實現(xiàn)方案和實現(xiàn)目的均不相同。
交換機持久化
??交換機持久化是為了確保用戶創(chuàng)建的交換機在RabbitMQ重啟后依舊存在的一種手段。
??交換機持久化在聲明交換機過程中通過將durable參數(shù)設(shè)置為true實現(xiàn)。交換機持久化會將交換機元數(shù)據(jù)也進行持久化,當然也包含隊列和路由的綁定關(guān)系。但如果綁定關(guān)系存在,隊列不存在則消息依舊不會發(fā)送到隊列中。
隊列持久化
??隊列持久化可以保障隊列自身的元數(shù)據(jù)不會丟失,不能保證存儲在隊列中的消息不會丟失。
??隊列持久化在聲明隊列的過程中通過將durable參數(shù)設(shè)置為true實現(xiàn)。需要注意的是,雖然隊列持久化不能保證消息持久化,但是消息的持久化實現(xiàn)必須依賴于隊列持久化,也就是說持久化消息只有存儲于持久化隊列中才會真正實現(xiàn)持久化。文章來源:http://www.zghlxwxcb.cn/news/detail-659216.html
消息持久化
??消息持久化確保了消息入隊后到消息被消費這一過程中的穩(wěn)定性,防止由于故障異常原因?qū)е麓鎯υ陉犃兄猩形幢幌M的消息丟失。
??消息持久化可以在發(fā)送消息的過程中將消息元數(shù)據(jù)deliveryMode設(shè)置為2實現(xiàn)。
??消息持久化雖然可以盡量保證隊列中的消息不丟失,但是并不能完全確保隊列中的消息不丟失,待消息入隊后,通過持久化技術(shù)會將消息寫入磁盤中,但是Linux操作系統(tǒng)底層并不會實時的把數(shù)據(jù)寫入磁盤中,它會首先將需要寫入磁盤的數(shù)據(jù)放入緩存區(qū)中,如果消息入隊并且將數(shù)據(jù)寫入緩存區(qū)尚未寫入磁盤的過程中出現(xiàn)服務器異常,則消息依舊面臨了丟失的情況。
??該問題可以通過發(fā)布確認機制進行解決。我們了解到發(fā)布確認機制其實本質(zhì)上是確保消息合法的發(fā)送到rabbitMQ中的交換機中的,但是發(fā)送確認機制的應答時間是在消息完成持久化后,因此我們可以通過發(fā)送確認機制加持久化技術(shù)進一步確保消息在隊列中被持久化且避免丟失。文章來源地址http://www.zghlxwxcb.cn/news/detail-659216.html
總結(jié)
內(nèi)容 | 交換機持久化 | 隊列持久化 | 消息持久化 |
---|---|---|---|
實現(xiàn)方式 | 聲明交換機是定義 | 聲明隊列時定義 | 發(fā)送消息時定義 |
作用 | 持久化交換機的元數(shù)據(jù),避免重啟丟失 | 持久化隊列的元數(shù)據(jù),避免重啟丟失 | 持久化消息 |
特點 | 隊列持久化不能代表消息持久化,但是持久化消息只能在持久化隊列中進行 | 消息持久化也可能會存儲消息丟失的問題,可通過發(fā)送確認機制和RabbitMQ集群的方式進一步保障消息的安全性。 |
到了這里,關(guān)于RabbitMQ 持久化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!