如何仅处理一次事件

Patricia Arquette
发布: 2024-10-07 06:08:30
原创
890 人浏览过

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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!