wordpress投訴功能qq群怎么優(yōu)化排名靠前
1.MQ可靠性:
如何保證消息的可靠性:
????????(1).通過配置可以讓交換機、隊列、以及發(fā)送的消息都持久化。這樣隊列中的消息會持久化到磁盤,MQ重起消息依然存在。
????????(2).3.6.0版本開始,RabbitMQ引入了惰性隊列模式,這種模式下,消息會直接存儲到磁盤而不是內(nèi)存中,這樣可以減少內(nèi)存消耗,尤其適用于消息量特別大的場景。在3.12版本之后,惰性隊列已經(jīng)成為RabbitMQ的默認隊列類型。
? ? ? ? (3).開啟持久化和生產(chǎn)者確認時,RabbitMQ只有在消息持久化完成后才會給生產(chǎn)者返回ACK回執(zhí)。
消息持久化
????????消息持久化是確保 RabbitMQ 中的消息在服務(wù)器重啟或崩潰后不會丟失的重要機制。通過持久化消息,可以將消息存儲在磁盤上,而不僅僅是內(nèi)存中。這樣,即使 RabbitMQ 服務(wù)器發(fā)生故障,消息也不會丟失,因為它們可以從磁盤上恢復(fù)。??
持久化隊列:在創(chuàng)建隊列時,可以指定隊列為持久化的。這意味著隊列的元數(shù)據(jù)和其中的消息都會在 RabbitMQ 服務(wù)器重啟后恢復(fù)。
持久化消息:當(dāng)發(fā)送消息時,可以通過設(shè)置消息的?
deliveryMode
?屬性為?2
(表示消息是持久化的)來確保消息被持久化到磁盤。確保交換器持久化(可選):雖然交換器的持久化不是必需的,但建議也將其設(shè)置為持久化,以確保交換器的配置在服務(wù)器重啟后能夠恢復(fù)。
2.消費者可靠性
消費者如何保證消費者一定被消費:
? ? ? ? (1). 開啟消息確認機制為auto,由spring確認消息處理成功后返回ack,異常時返回nack
? ? ? ? (2).開啟消費者失敗重試機制,并設(shè)置MessageRecover,多次重試失敗后將消息投遞到異常交換機,交由人工處理。
消費者確認機制
????????消費者確認是一種確保消息被正確處理的協(xié)議。當(dāng) RabbitMQ 將消息傳遞給消費者后,消費者需要通過發(fā)送一個確認回 RabbitMQ 來告知它已經(jīng)成功接收并處理了這個消息。這樣,RabbitMQ 才會從隊列中移除該消息。這個機制對于確保數(shù)據(jù)的可靠性至關(guān)重要。RabbitMQ提供了兩種消費者確認模式:
? ? ? ? (1).自動確認(Auto Acknowledge)
- 模式描述:消息一旦被消費者接收,RabbitMQ立即認為該消息已被成功處理,并將其從隊列中刪除,無需等待消費者明確確認。
- 優(yōu)點:吞吐量高,因為省去了顯式確認的過程。
- 缺點:如果消費者在處理消息過程中崩潰,消息會丟失,因為RabbitMQ在消息到達消費者時就已經(jīng)將其標記為已處理。
? ? ? ? (2).手動確認(Manual Acknowledge)
- 模式描述:消費者在處理完消息后,需要顯式地向RabbitMQ發(fā)送確認(ACK)信號,表明該消息已經(jīng)被成功處理。只有當(dāng)收到這個確認后,RabbitMQ才會將消息從隊列中刪除。
- 優(yōu)點:確保消息不會因消費者故障而丟失。如果消費者處理消息失敗,RabbitMQ可以將該消息重新投遞給其他消費者(或同一消費者)。
- 缺點:稍微增加了系統(tǒng)的復(fù)雜性和延遲,因為需要等待消費者的明確確認。
消費者失敗重試機制
????????消費者失敗重試機制是一種確保消息在處理失敗時能夠被重新處理的策略。消費者在處理消息時,如果發(fā)生異常,可以在本地進行重試。重試的次數(shù)和間隔可以通過配置來設(shè)定。例如,在Spring AMQP中,可以通過application.yml
文件配置重試機制,如下所示:
如何保證業(yè)務(wù)冪等性
?????為每條消息生成唯一的ID,并在消費時檢查是否已處理過。在數(shù)據(jù)庫層面使用唯一約束,防止重復(fù)插入。