inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

RabbitMQ를 이용한 비동기 아키텍처 한방에 해결하기

16.DeadLetterQueue를 이용한 재처리

16 강의 메세지 retryCount의 의도

12

kellyyoon.dev

작성한 질문수 1

0

retryCount가 전역에서 작동하는것이 좀 수상하네요.

 

각 메세지의 retryCount를 세어야 할 것 같은데 저렇게 두면 혹시 메세지들이 들어오면 숫자가 마구 이랬다 저랬다 할 가능성은 없나요? 이를테면 메세지 두세개가 들어왔는데 첫번째는 실패 두번째 메세지 실패 세번째 성공 이런 경우 첫번째 메세지가 성공할때까지 sync하게 작동하여 완전 처리될때까지 두번째 메세지는 아예 실행되지 않는것인가요? 아니면 평행하게 동시에 실행되는거라 저 코드가 좀 잘못된 건가요?

 

spring-boot jpa websocket rabbitmq

답변 1

0

인프런 AI 인턴

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

질문해주신 내용에 대해 설명드리겠습니다.

  1. RetryCount의 관리:

    • retryCount가 전역 변수로 설정되어 있는 경우, 여러 메시지가 동시에 처리될 때 서로 다른 메시지들이 동일한 retryCount를 공유하게 됩니다. 이는 특정 메시지가 실패하여 재시도될 때마다 다른 메시지들의 retryCount에도 영향을 미칠 수 있어 예상치 않은 동작을 초래할 수 있습니다.
    • 올바르게 각 메시지의 retryCount를 개별적으로 관리하기 위해서는 retryCount를 전역 변수가 아닌 메시지의 속성이나 메서드 내부의 지역 변수로 설정하는 것이 권장됩니다. 이렇게 하면 각 메시지가 별도의 retryCount를 갖게 되어 격리될 수 있습니다.
  2. 메시지의 처리 방식:

    • 멀티스레드 환경 혹은 비동기적으로 메시지가 처리되는 경우, 각 메시지는 별도의 컨텍스트에서 처리됩니다. 따라서 전역 변수를 사용하여 상태를 유지하면 경쟁 조건(race condition)이 발생할 수 있습니다.
    • 메시지가 동시에 실행되는 경우를 고려하여 retryCount를 메시지 단위로 분리하여 처리 로직에 영향을 미치지 않도록 해야 합니다.

관련된 내용에 대해 더 자세한 방법이나 예시가 필요하시면, 아래의 유사한 문제와 해결 방법을 다룬 링크를 참고하시면 좋습니다:

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

추가적으로 어떻게 구현하면 더 안전하고 효율적인지에 대한 지식공유자님의 의견이 필요하시면 이어서 질문 부탁드립니다. 곧 지식공유자께서 직접 답변해 주실 것입니다.

step 4 - fanout 관련 질문

0

67

2

dlx dlq 설정 관련

0

64

1

동적 큐 이름 설정 방법 및 SimpleRabbitListenerContainerFactory의 재정의에 따른 Retry 설정 미적용 관련 질문입니다.

0

95

1

강의 자료 관련

0

83

2

인증 에러

0

80

2

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

0

109

2

Producer/Consumer 단위

0

71

2

안녕하세요 섹션2. 12번 강의에서 질문 있습니다.

0

82

2

안녕하세요 "섹션2 8. Consumer간 작업 분배" 에서 질문 있습니다.

0

88

2

컨슈머 서버 질문드립니다

0

79

2

DLQ 관련 질문

0

130

2

알림은 왜 pub sub 구조로 설계하나요?

0

148

2

Receiver를 여러개 하려면 어떻게하나요?

0

139

2

깃허브 step11 브랜치

0

97

1

DLQ 재시도 로직 처리후 DLQ에 unacked 1건이 남는거에 대해서

0

149

2

NotificationMessage가 필요한 이유 질문

0

107

2

스탭4 질문드립니다

0

150

3

생성자 질문드립니다

0

105

2

Pub/Sub & WebSocket 활용한 실시간 알림

0

211

2

채팅 방식 질문입니다!

0

138

2

강의와 살짝 무관하지만.. MQ에 대한 질문이 있습니다!

0

207

1

챕터18 retry yml 강의 부분 질문

0

186

2

tutorial-step4 질문

0

142

2

pub/sub, producer/consumer 차이

0

260

2