>  기사  >  백엔드 개발  >  이벤트를 정확히 한 번 처리하는 방법

이벤트를 정확히 한 번 처리하는 방법

Patricia Arquette
Patricia Arquette원래의
2024-10-07 06:08:30892검색

How To Process Events Exactly-Once

수신 이벤트를 정확히 한 번 처리하고 싶으신가요?

글쎄, 모든 분산 시스템 현자들은 이론적으로 불가능할 수 없다고 말할 것입니다. 기술적으로는 그 말이 맞습니다. 메시지를 보냈지만 응답을 받지 못한 경우 수신자가 오프라인인지 또는 속도가 느린지 알 수 없으므로 결국에는 메시지를 다시 보낼 수 밖에 없습니다. 처리하고 싶습니다.

그렇다면 정확히 한 번만 처리하는 것이 불가능하다면 왜 DBOS를 비롯한 많은 시스템에서 이를 제공한다고 주장합니까?

비결은 또 다른 속성인 멱등성을 활용하는 것입니다. 메시지 수신자를 멱등성으로 설계하면 메시지를 여러 번 전달할 수 있으며 중복 전달은 효과가 없으므로 괜찮습니다. 따라서 최소 1회 전달과 멱등성의 조합은 실제로 정확히 1회 의미 체계와 동일합니다.

내부적으로는 이것이 바로 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으로 문의하세요.
이전 기사:데브옵스가 뭐야?다음 기사:데브옵스가 뭐야?