강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của ssunn08124488
ssunn08124488

câu hỏi đã được viết

Giải quyết kiến trúc không đồng bộ bằng RabbitMQ một cách nhanh chóng

20. Thực hành xử lý giao dịch trên Message Queue tích hợp DB

RabbitMQ에서의 트랙잭션 메시징 질문

Đã giải quyết

Viết

·

83

0

안녕하세요. 트랜잭션 메시징에 대해 궁금한 것이 생겨 질문드립니다.

트랜잭션 메시징은 데이터베이스 작업과 메시지 발행 작업을 원자적으로 수행하여 데이터의 일관성을 보장하는 것으로 알고 있습니다.

강의 내용 중 '트랜잭션 메시징의 한계'에서 분산 트랜잭션을 완벽하게 보장하지는 않는다고 하셔서 이를 DB의 트랜잭션과 메시지 전송의 트랜잭션이 서로 독립적으로 작동한다고 이해했습니다.

그럼 RabbitMQ에서 트랜잭션 메시징을 지원한다고 할 수 있나요?

 

 

javaspring-bootjpamsawebsocketrabbitmq

Câu trả lời 2

0

codevillain님의 프로필 이미지
codevillain
Người chia sẻ kiến thức

안녕하세요. 수강자님

DB와 RabbitMQ같은 메시지 브로커의 트랜잭션은 서로 독립적입니다.

그래서 RabbitMQ에서 트랜잭션을 구현하려면 DB와는 별도로 자체에서 처리하는 방식으로 "처리는 가능" 합니다.

 

19강 자료에 나와있는데,

 

amqp-client에 의존성 (starter-amqp에 포함)

  1. channel.txSelect():

    • 트랜잭션 시작. 이후 모든 메시지 전송 작업은 이 트랜잭션 내에서 실행.

  2. channel.txCommit():

    • 트랜잭션 커밋. 모든 작업이 성공적으로 수행되었음을 RabbitMQ에 알림.

  3. channel.txRollback():

    • 트랜잭션 롤백. 트랜잭션 내 작업을 무효화하고 변경사항을 되돌림.

이 방식으로 처리는 가능합니다만, 아시다시피 메시지큐는 비동기 환경에서 분산 메시징을 처리하는데 탁월한 미들웨어이기 때문에 이 방식으로 굳이 트랜잭션을 구현하는게 의미있나? 라는 관점에서 보면 구현 비용대비 실효성이 떨어지는 편입니다

따라서 19강에서 설명하는 바와 같이 Outbox 패턴(db에 별도로 저장 한 뒤 다른 프로세스를 통해 메시지 처리)이나 TCC와 같은 형태의 재시도와 보정을 통한 멱등성을 보장하는게 훨씬 업무적으로는 좋은 선택이라고 판단합니다.

 

완강이 얼마 남지 않으셨네요. 마무리 잘 하시기 바랍니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. ssunn0812님.

트랜잭션 메시징에 관해 질문해 주셨습니다. RabbitMQ에서 트랜잭션 메시징을 이해하려면, 메시지 브로커와 데이터베이스 간의 상호 작용을 살펴보는 것이 중요합니다.

  1. 트랜잭션 메시징 개념:

    • 트랜잭션 메시징은 데이터베이스와 메시지 브로커 간의 작업을 일관되게 유지하고, 중단 없이 완료되도록 보장하는 것을 목표로 합니다.
    • 이는 일반적으로 두 시스템 간의 분산 트랜잭션을 이용하지만, 분산 시스템에서 트랜잭션을 완벽하게 보장하려면 몇 가지 복잡한 문제가 있습니다.
  2. RabbitMQ의 트랜잭션 지원:

    • RabbitMQ 자체적으로는 메시지 전송에 대한 트랜잭션을 지원할 수 있긴 하지만, 이는 메시지 브로커 내에서의 트랜잭션입니다.
    • 데이터베이스와 RabbitMQ 간의 분산 트랜잭션을 완전히 보장하려면, 트랜잭션 관리자나 커밋/롤백의 조정을 통해야 가능한데, 이는 일반적으로 직접적인 지원보다는 애플리케이션 수준에서 구현해야 합니다.
  3. 실제 구현의 예:

    • 시스템 안정성을 위해 데이터베이스의 트랜잭션 커밋 후에 메시지를 전송하거나, 일종의 별도 롤백 메커니즘을 이용할 수 있습니다.
    • BizTalk Server나 Kafka 등의 플랫폼은 이러한 트랜잭션 메시징을 지원하며, RabbitMQ와 함께 사용해 트랜잭션 메시징의 일관성을 높일 수 있습니다.

이 주제와 관련하여 더 깊이 있는 설명을 원하시면 다음의 질문들을 참조하시기 바랍니다:
- “RabbitMQ 트랜잭션 및 메시지 일관성에 대한 고민”

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Hình ảnh hồ sơ của ssunn08124488
ssunn08124488

câu hỏi đã được viết

Đặt câu hỏi