冪等消費模式 - Pradeep Loganathan
事件驅動架構是一個分散式系統,而分散式系統是天生網路不可靠。這需要在發生故障時計劃進行重試,但是重試會導致重複記錄,某人帳戶中支付兩次付款是不可原諒的。
為了避免多次處理事件,我們需要應用Exactly-once語義。如果訊息處理系統和訊息消費者之間沒有某種合作,就不可能保證完全一次處理。如果訊息系統有對訊息釋出者釋出訊息的確認機制,,那麼每個訊息必須具有唯一ID以供訊息系統進行重複資料刪除。在消費者這邊也可以實現,重複資料刪除可用於確保不處理重複訊息。消費邏輯需是冪等的。
本質上,冪等意味著當多次接收到相同的事件/訊息時,對於接收者的狀態沒有變化。以下是一些方法:
- 透過按身份標識ID重複訊息來重複傳入訊息。
- 設計狀態切換來表示訊息的接受,以便在每次收到相同訊息時產生相同影響。
- 收到重複訊息允許狀態切換產生無害影響。
冪等消費者模式就像一個有狀態過濾器,它允許由它包裝的邏輯只執行一次。實現這個需要兩個元素:
- 一種透過業務鍵唯一標識key每條訊息的方法。
- 冪等儲存庫。冪等儲存庫是一組持久Key的容器,它們將在消費者重新啟動後繼續存在,並且可以在資料庫表,日記帳或類似工具中實現。
當事件到達時,消費者需要使用分配給事件的事件key來唯一地識別它。檢查冪等儲存庫以檢視它是否包含key,如果不包含,則執行由其包裝的邏輯,否則將跳過該邏輯。
許多訊息傳遞系統,例如Apache ActiveMQ,Apache Kafka,Apache Camel都具有消除重複訊息的功能。Idempotent消費者模式用於在這些系統中提供這種功能。
相關文章
- Rabbitmq消費者冪等性(不重複消費)MQ
- MQ系列10:如何保證訊息冪等性消費MQ
- 聊聊如何實現一個帶冪等模板的Kafka消費者Kafka
- 一文講透訊息佇列RocketMQ實現消費冪等佇列MQ
- GitHub - fencyio:為RabbitMQ消費者提供冪等性保證的庫包GithubMQ
- Rabbit MQ 怎麼保證可靠性、冪等性、消費順序?MQ
- 分散式訊息佇列:如何保證訊息不被重複消費?(訊息佇列消費的冪等性)分散式佇列
- 訊息佇列-如何保證訊息的不被重複消費(如何保證訊息消費的冪等性)佇列
- 生產消費者模式模式
- 什麼是冪等
- 冪等最佳實踐
- 冪等性問題
- 什麼是冪等性?四種介面冪等性方案詳解!
- 生產者消費者模式模式
- RocketMQ 5.0 POP 消費模式探秘MQ模式
- 【Java面試】什麼是冪等?如何解決冪等性問題?Java面試
- 冪等方法的應用
- 再談冪等機制
- 系統冪等設計
- Elasticjob執行job冪等AST
- 冪等設計詳解
- RocketMQ 5.0 POP 消費模式探祕MQ模式
- python 生產者消費者模式Python模式
- 深入理解冪等技術
- 介面冪等性如何實現?
- 分散式之介面冪等性分散式
- 介面冪等性解決方案
- 併發設計模式---生產者/消費者模式設計模式
- 九、生產者與消費者模式模式
- [java]如何裂解RESTful的冪等性JavaREST
- 如何保證介面的冪等性?
- gRPC重試與介面冪等性RPC
- 【工作篇】介面冪等問題探究
- MySQL中的冪等複製分析MySql
- SpringBoot系列——防重放與操作冪等Spring Boot
- 劉氏數列與等冪和
- 支援自動伸縮的消費者模式模式
- 【RocketMQ】RocketMQ 5.0新特性(二)- Pop消費模式MQ模式