Skip to content

Commit f204359

Browse files
authored
Merge pull request #171 from team-gogo/feature/match-search-fallback-circuitbreaker
2 parents fdfb7ec + 522c6ec commit f204359

File tree

3 files changed

+36
-1
lines changed

3 files changed

+36
-1
lines changed

build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ repositories {
2525
extra["springCloudVersion"] = "2024.0.0-RC1"
2626

2727
dependencies {
28+
implementation("org.springframework.boot:spring-boot-starter-aop")
29+
implementation("org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j")
2830
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
2931
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
3032
implementation("org.springframework.boot:spring-boot-starter-data-redis")

src/main/kotlin/gogo/gogostage/global/feign/client/BettingClient.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package gogo.gogostage.global.feign.client
22

3+
import gogo.gogostage.global.feign.fallback.BettingClientFallbackFactory
34
import gogo.gogostage.global.internal.betting.stub.BettingBundleDto
45
import gogo.gogostage.global.internal.betting.stub.TotalBettingPointDto
56
import org.springframework.cloud.openfeign.FeignClient
67
import org.springframework.web.bind.annotation.GetMapping
78
import org.springframework.web.bind.annotation.RequestParam
89

9-
@FeignClient(name = "gogo-betting")
10+
@FeignClient(name = "gogo-betting", fallbackFactory = BettingClientFallbackFactory::class)
1011
interface BettingClient {
1112
@GetMapping("/betting/bundle")
1213
fun bundle(
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package gogo.gogostage.global.feign.fallback
2+
3+
import gogo.gogostage.global.feign.client.BettingClient
4+
import gogo.gogostage.global.filter.LoggingFilter
5+
import gogo.gogostage.global.internal.betting.stub.BettingBundleDto
6+
import gogo.gogostage.global.internal.betting.stub.TotalBettingPointDto
7+
import org.slf4j.Logger
8+
import org.slf4j.LoggerFactory
9+
import org.springframework.cloud.openfeign.FallbackFactory
10+
import org.springframework.stereotype.Component
11+
12+
@Component
13+
class BettingClientFallbackFactory : FallbackFactory<BettingClient> {
14+
15+
private val log: Logger = LoggerFactory.getLogger(LoggingFilter::class.java)
16+
17+
override fun create(cause: Throwable): BettingClient {
18+
return object : BettingClient {
19+
override fun bundle(matchIds: List<Long>, studentId: Long): BettingBundleDto {
20+
log.error("BettingClient.bundle FallBack - matchIds: $matchIds, studentId: $studentId")
21+
return BettingBundleDto(
22+
bettings = emptyList(),
23+
)
24+
}
25+
26+
override fun totalBettingPoint(matchIds: List<Long>, studentId: Long): TotalBettingPointDto {
27+
log.error("BettingClient.totalBettingPoint FallBack - matchIds: $matchIds, studentId: $studentId")
28+
throw cause
29+
}
30+
}
31+
}
32+
}

0 commit comments

Comments
 (0)