Skip to content

✨ [FEAT] Transactional OUTBOX 패턴 적용 #143

@Gothax

Description

@Gothax

✨ 어떤 기능인가요?

        PaymentEntity payment = PaymentEntity.createPayment(response);
        paymentRepository.save(payment);

        PaymentCompleteEvent event = paymentConverter.toPaymentCompleteEvent(response);
        kafkaTemplate.send("payment-completed-topic", event);

Kafka로 메시지 send가 장애가 나는 상황에 대응하지 못한다는 문제점을 해결하기 위해 도입
payment save와 kafka send를 Atomic하게 구현합니다.

해결방법으로 transactional outbox pattern 도입
kafka message를 send하는 것이 아니라 RDB outbox table에 저장 -> 발송하지 못한 메시지를 scheduler로 read -> send

Referred

여기서 DB에 save를 한 뒤에 메세지를 발행하는거라 디비는 변경이 되지만 Kafka 메시지 전송이 실패하면 Saga 오케스트레이터가 이벤트를 수신하지 못한다고 하네요

https://curiousjinan.tistory.com/entry/transactional-outbox-pattern-microservices-kafka
outbox를 쓰면 해결할 수 있는 것 같아용
저도 공부해볼게요 ,,,,,,,,!!!!!!!!!

Originally posted by @limdodod in #140 (comment)

📝 작업 상세 내용

  • TODO
  • TODO
  • TODO

🌐 참고할만한 자료(선택)

https://curiousjinan.tistory.com/entry/transactional-outbox-pattern-microservices-kafka

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions