33import com .haru .api .domain .moodTracker .service .MoodTrackerReportService ;
44import lombok .RequiredArgsConstructor ;
55import lombok .extern .slf4j .Slf4j ;
6+ import org .springframework .beans .factory .annotation .Value ;
67import org .springframework .data .redis .core .StringRedisTemplate ;
78import org .springframework .scheduling .annotation .Scheduled ;
89import org .springframework .stereotype .Component ;
@@ -19,7 +20,10 @@ public class ReportWorker {
1920 private final MoodTrackerReportService reportService ;
2021 private final ExecutorService executor = Executors .newFixedThreadPool (5 ); // 5개 병렬 Worker
2122
23+ @ Value ("${queue-name}" )
24+ private String QUEUE_KEY ;
2225 private static final String WORKER_QUEUE = "REPORT_WORKER_QUEUE" ;
26+ private static final String FAILED_QUEUE = "REPORT_FAILED_QUEUE" ;
2327
2428 @ Scheduled (fixedDelay = 2000 ) // 2초마다 큐 확인
2529 public void consumeTasks () {
@@ -34,6 +38,9 @@ private void process(Long moodTrackerId) {
3438 try {
3539 reportService .generateAndUploadReportFileAndThumbnail (moodTrackerId );
3640 log .info ("Report 생성 성공: {}" , moodTrackerId );
41+ // ZSET에서 제거
42+ redisTemplate .opsForZSet ().remove (QUEUE_KEY , moodTrackerId );
43+ log .info ("[RedisReportConsumer] ZSET({})에서 제거됨 → {}" , QUEUE_KEY , moodTrackerId );
3744 } catch (Exception e ) {
3845 log .error ("Report 생성 실패 (재시도 예정): {}" , moodTrackerId , e );
3946
@@ -44,7 +51,7 @@ private void process(Long moodTrackerId) {
4451 redisTemplate .opsForList ().leftPush (WORKER_QUEUE , moodTrackerId .toString ());
4552 } else {
4653 log .error ("재시도 한계 초과, 실패 큐로 이동: {}" , moodTrackerId );
47- redisTemplate .opsForList ().leftPush ("REPORT_FAILED_QUEUE" , moodTrackerId .toString ());
54+ redisTemplate .opsForList ().leftPush (FAILED_QUEUE , moodTrackerId .toString ());
4855 }
4956 }
5057 }
0 commit comments