해결된 질문
작성
·
28
답변 2
0
안녕하세요. 수강자님
DB와 RabbitMQ같은 메시지 브로커의 트랜잭션은 서로 독립적입니다.
그래서 RabbitMQ에서 트랜잭션을 구현하려면 DB와는 별도로 자체에서 처리하는 방식으로 "처리는 가능" 합니다.
19강 자료에 나와있는데,
amqp-client에 의존성 (starter-amqp에 포함)
channel.txSelect()
:
트랜잭션 시작. 이후 모든 메시지 전송 작업은 이 트랜잭션 내에서 실행.
channel.txCommit()
:
트랜잭션 커밋. 모든 작업이 성공적으로 수행되었음을 RabbitMQ에 알림.
channel.txRollback()
:
트랜잭션 롤백. 트랜잭션 내 작업을 무효화하고 변경사항을 되돌림.
이 방식으로 처리는 가능합니다만, 아시다시피 메시지큐는 비동기 환경에서 분산 메시징을 처리하는데 탁월한 미들웨어이기 때문에 이 방식으로 굳이 트랜잭션을 구현하는게 의미있나? 라는 관점에서 보면 구현 비용대비 실효성이 떨어지는 편입니다
따라서 19강에서 설명하는 바와 같이 Outbox 패턴(db에 별도로 저장 한 뒤 다른 프로세스를 통해 메시지 처리)이나 TCC와 같은 형태의 재시도와 보정을 통한 멱등성을 보장하는게 훨씬 업무적으로는 좋은 선택이라고 판단합니다.
완강이 얼마 남지 않으셨네요. 마무리 잘 하시기 바랍니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. ssunn0812님.
트랜잭션 메시징에 관해 질문해 주셨습니다. RabbitMQ에서 트랜잭션 메시징을 이해하려면, 메시지 브로커와 데이터베이스 간의 상호 작용을 살펴보는 것이 중요합니다.
트랜잭션 메시징 개념:
RabbitMQ의 트랜잭션 지원:
실제 구현의 예:
이 주제와 관련하여 더 깊이 있는 설명을 원하시면 다음의 질문들을 참조하시기 바랍니다:
- “RabbitMQ 트랜잭션 및 메시지 일관성에 대한 고민”
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.