首頁  >  文章  >  後端開發  >  如何僅處理一次事件

如何僅處理一次事件

Patricia Arquette
Patricia Arquette原創
2024-10-07 06:08:30894瀏覽

How To Process Events Exactly-Once

想要處理傳入事件僅一次

嗯,任何分散式系統學究都會說你不能,因為它理論上是不可能的。從技術上講,他們是對的:如果你發送一條訊息但沒有得到答复,你就無法知道接收者是離線還是速度慢,所以最終你別無選擇,只能再次發送訊息,如果你想要處理它。

那麼,如果一次性處理不可能,為什麼包括 DBOS 在內的許多系統都聲稱提供它?

訣竅是利用另一個屬性:冪等性。如果您將訊息接收者設計為冪等的,那麼您可以多次向其傳遞訊息,這沒有問題,因為重複傳遞沒有任何效果。因此,至少一次傳遞和冪等性的組合在實踐中與精確一次語義相同。

在幕後,這正是 DBOS 事件接收器(如 Kafka)的工作方式。它們從事件(例如,從 Kafka 主題分區偏移量)產生唯一鍵,並將其用作事件處理工作流程的冪等性鍵。這樣,即使一個事件被多次傳遞,工作流程也只處理一次。

以下是一次處理 Kafka 訊息所需的所有程式碼:


from dbos import DBOS, KafkaMessage

@DBOS.kafka_consumer(config, ["topic"])
@DBOS.workflow()
def test_kafka_workflow(msg: KafkaMessage):
    DBOS.logger.info(f"Message received: {msg.value.decode()}")


在這裡了解更多!

以上是如何僅處理一次事件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:什麼是 devops下一篇:什麼是 devops