Skip to content

Commit 9c4253b

Browse files
authored
Merge pull request #157 from team-gogo/update/match-search-circuitbreaker
[internal] betting service client fallback, ciurcuitbreaker 적용
2 parents 9f50bc3 + b8d1891 commit 9c4253b

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-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: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
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
6+
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker
57
import org.springframework.cloud.openfeign.FeignClient
68
import org.springframework.web.bind.annotation.GetMapping
79
import org.springframework.web.bind.annotation.RequestParam
810

9-
@FeignClient(name = "gogo-betting")
11+
@FeignClient(name = "gogo-betting", fallbackFactory = BettingClientFallbackFactory::class)
1012
interface BettingClient {
1113
@GetMapping("/betting/bundle")
1214
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)