Repository navigation
[#39] 입찰 큐 컨슘 실패 처리와 아웃박스 기반 발행 도입 - #40
Conversation
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars.
|
|
| public void validateAcceptingBids(LocalDateTime requestedAt) { | ||
| if (!status.isAcceptingBids() || !extendedClosesAt.isAfter(requestedAt)) { | ||
| throw new BusinessException(AuctionErrorCode.AUCTION_ALREADY_CLOSED); | ||
| } |
There was a problem hiding this comment.
마감 스케줄러가 먼저 실행되면 경매 상태가 변경되어, 마감 전에 접수한 입찰도 거절될 수 있어요. 이 부분은 후속 작업에서 입찰 접수 마감과 최종 낙찰 확정을 분리해주시면 됩니다.
해당 경매에 접수됐지만 결과가 없는 요청이 남아 있으면 최종 확정을 미루고, 처리가 끝난 뒤 연장된 마감 시각을 다시 확인해주세요. outbox의 PENDING뿐 아니라 SQS에 발행됐지만 입찰 결과가 없는 요청도 포함해야 합니다. 요청 저장과 최종 확정에서 같은 경매의 락을 사용하면 확인 직후 요청이 추가되는 경우도 방지할 수 있어요.
| message = jsonConverter.fromJson(outbox.getPayload(), BidMessage.class); | ||
| } catch (IllegalArgumentException e) { | ||
| log.error("Outbox payload unreadable: id={}, requestId={}", outbox.getId(), outbox.getRequestId(), e); | ||
| outbox.markFailed(); | ||
| outboxRepository.save(outbox); | ||
| return true; |
There was a problem hiding this comment.
outbox만 FAILED로 변경하면 BidRequestResult가 없어서 결과 조회는 계속 PENDING을 반환합니다. 발행을 포기한 요청은 사용자에게도 실패 결과가 전달되어야 해요.
후속 작업에서는 bidderId와 bidAmount도 outbox의 별도 컬럼에 저장하고, 발행을 최종 실패로 처리할 때 BID_NOT_PROCESSED 결과를 함께 저장해주세요. 그러면 payload를 읽지 못한 경우에도 요청자를 확인하고 실패 결과를 반환할 수 있습니다. outbox 상태와 입찰 결과는 같은 트랜잭션에서 반영해주세요.



개요
입찰 큐(SQS)의 컨슘 실패와 퍼블리싱 실패 처리 보완
컨슘 실패 처리
BID_NOT_PROCESSED)로 응답하고 DLQ로 보내서 같은 경매의 다음 입찰이 막히지 않게 구현아웃박스 기반 발행
마감 판단 기준 변경
requestedAt) 기준으로 바꿔서 마감 전에 접수된 입찰이 큐 대기 때문에 거절되지 않도록 수정메인 리뷰어 지정 및 Due Date
리뷰 시 참고 사항
BidMessageConsumer.isRetryable): 일시적인 DB 오류만 재시도하고, 나머지는 바로 실패 처리 후 DLQ로 보냅니다.OutboxRelay.publish): SQS 발행 실패는 순서를 지키기 위해 멈추고 재시도하고, payload를 읽을 수 없는 경우만 FAILED로 넘깁니다.TODO
requestedAt) 기준으로 변경References
[1] 사용된 레퍼런스에 대한 링크를 남겨주세요.
체크리스트