Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#70] RabbitMQ 재처리 설정 #71

Merged
merged 12 commits into from
Apr 5, 2024
Merged

[#70] RabbitMQ 재처리 설정 #71

merged 12 commits into from
Apr 5, 2024

Conversation

hoa0217
Copy link
Collaborator

@hoa0217 hoa0217 commented Apr 5, 2024

개요

메세지 Consume 도중 예외가 발생하면, 처리되지 않았으므로 다시 큐로 들어가게되며 예외가 다시 발생한다. 그리고 해당 작업은 무한반복된다.

작업사항

queue drawio

  • DLX(Dead Letter Exchange)를 생성하여 Consume 도중 재처리 가능한 예외가 발생한 메세지들은 해당 Exchange로 보낸다. (AmqpRejectAndDontRequeueException)
  • 재처리 불가능한 예외는 즉시확인처리하여 메세지를 소멸시킨다. (ImmediateAcknowledgeAmqpException)
  • DLQ(Dead Letter Queue)는 예외가 발생한 메세지를 받아 설정된 retry횟수만큼 다시 Alarm Queue에 보낸다.

설정참고: https://www.baeldung.com/spring-amqp-error-handling

변경로직

  • 패키지 구조 개선

hoa0217 added 10 commits April 4, 2024 02:14
- DLX(Dead Letter Exchange): 소비 시 예외를 던지면 해당 메세지를 거부하고 Queue Flag를 false로 설정하여 DLX로 보낸다.

Related: #70
- 기존엔 MemberService에서 Member를 찾았으나 NotFoundException은 DLX로 보내지못함. 일단 Amqp 예외를 던지자.

Related: #70
- 메세지잘못으로 발생된 에러는 MessageParsingError로 던지기.

Related: #70
- 심각한 에러일 경우 ImmediateAcknowledgeAmqpException 예외를 던지고, 그 외엔 dlx큐로 보내는 AmqpRejectAndDontRequeueException 예외를 던진다.
- ImmediateAcknowledgeAmqpException: 발생 시 해당 메세지를 즉시 확인 처리하여, 다시 큐에 넣거나 다른 처리를 하지않는다. 즉, 재처리해도 소용없는 심각한 오류일 경우 해당 예외를 던진다.
- AmqpRejectAndDontRequeueException: 발생 시 해당 메세지를 거부하고 DLX로 보낸다. 그리고 DLX의 재처리 로직으로 설정한 retry 횟수만큼 다시 시도한다.

Related: #70
- 심각한 예외인지 판단하는 Straegy를 정의한다.
- 기본적으로 제공해주는 DefaultExceptionStrategy를 데코레이터로 감싸서 NotFoundEntityException과 MessageParsingError를 추가한다.

Related: #70
- 헤더에 RETRY_COUNT_HEADER값이 없으면 0으로 설정 후 reservation큐로 다시 보낸다. 그리고 1을 더한다.
- 헤더에 RETRY_COUNT_HEADER값이 3미만이면 reservation큐로 다시 보낸다. 그리고 1을 더한다.
- 헤더에 RETRY_COUNT_HEADER값이 3이상이면 메세지를 소멸시킨다.

Related: #70
@hoa0217 hoa0217 self-assigned this Apr 5, 2024
Copy link

github-actions bot commented Apr 5, 2024

⭐️Code Coverage

Overall Project 77.18% -2.27% 🍏
Files changed 40.22%

File Coverage
RabbitMQConfig.java 100% 🍏
ElasticSearchConfig.java 100% 🍏
AlarmDLQConsumer.java 100% 🍏
WebConfig.java 100% 🍏
QuerydslConfiguration.java 100% 🍏
SecurityConfiguration.java 100% 🍏
AlarmConsumer.java 85.29% -14.71% 🍏
AlarmProducer.java 85.29% -14.71% 🍏
AlarmService.java 83.97% 🍏
CustomFatalExceptionStrategy.java 80% -20% 🍏
CustomErrorHandler.java 70.37% -29.63%
CustomOAuth2UserService.java 13.95% 🍏
MessageParsingError.java 0%
OAuthAttributes.java 0%
AuthProvider.java 0%

@hoa0217 hoa0217 merged commit 8d91d88 into develop Apr 5, 2024
2 checks passed
@hoa0217 hoa0217 requested a review from f-lab-bot April 8, 2024 16:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant