From 6b2a77b391fe97c3bf553ab969fc69d8c9daa372 Mon Sep 17 00:00:00 2001 From: Rodrigo Verdiani Date: Mon, 27 Oct 2025 15:13:24 -0300 Subject: [PATCH] feat: add resilience4j retry configuration --- pom.xml | 6 ++++++ .../magamochi/mangamochi/client/JikanClient.java | 3 +++ .../mangamochi/client/MangaDexClient.java | 3 +++ src/main/resources/application.yml | 16 ++++++++++++++++ 4 files changed, 28 insertions(+) diff --git a/pom.xml b/pom.xml index f10f376..84c3513 100644 --- a/pom.xml +++ b/pom.xml @@ -125,6 +125,12 @@ org.springframework.boot spring-boot-starter-amqp + + + io.github.resilience4j + resilience4j-spring-boot3 + 2.3.0 + diff --git a/src/main/java/com/magamochi/mangamochi/client/JikanClient.java b/src/main/java/com/magamochi/mangamochi/client/JikanClient.java index 6ed37b6..11f4d17 100644 --- a/src/main/java/com/magamochi/mangamochi/client/JikanClient.java +++ b/src/main/java/com/magamochi/mangamochi/client/JikanClient.java @@ -2,12 +2,15 @@ package com.magamochi.mangamochi.client; import java.time.OffsetDateTime; import java.util.List; + +import io.github.resilience4j.retry.annotation.Retry; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; @FeignClient(name = "jikan", url = "https://api.jikan.moe/v4/manga") +@Retry(name = "JikanRetry") public interface JikanClient { @GetMapping SearchResponse mangaSearch(@RequestParam String q); diff --git a/src/main/java/com/magamochi/mangamochi/client/MangaDexClient.java b/src/main/java/com/magamochi/mangamochi/client/MangaDexClient.java index 60dfe6c..a3d5144 100644 --- a/src/main/java/com/magamochi/mangamochi/client/MangaDexClient.java +++ b/src/main/java/com/magamochi/mangamochi/client/MangaDexClient.java @@ -3,10 +3,13 @@ package com.magamochi.mangamochi.client; import com.magamochi.mangamochi.model.dto.MangaDexMangaDTO; import java.util.List; import java.util.UUID; + +import io.github.resilience4j.retry.annotation.Retry; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; @FeignClient(name = "mangaDex", url = "https://api.mangadex.org") +@Retry(name = "MangaDexRetry") public interface MangaDexClient { @GetMapping("/manga/{id}") MangaDexMangaDTO getManga(@PathVariable UUID id); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index c846e31..e59f9d4 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -51,3 +51,19 @@ jwt: manga-matcher: endpoint: ${MANGAMATCHER_ENDPOINT} + +resilience4j: + retry: + instances: + MangaDexRetry: + max-attempts: 5 + wait-duration: + seconds: 5 + retry-exceptions: + - feign.FeignException + JikanRetry: + max-attempts: 5 + wait-duration: + seconds: 5 + retry-exceptions: + - feign.FeignException