본문 바로가기
Spring/Spring Cloud

spring open feign 예제

by 아이티.파머 2022. 1. 14.
반응형

spring boot 에서 open feign 을 사용하기 위햐서는 spring cloud 라이브러리를 사용해야 한다.

앞서 이야기 했듯 open feign은 인터페이스 구현 만으로 빠르고 쉽게 api 를 호출 할 수 있다.

gradle.build

plugins {
    id 'org.springframework.boot' version '2.6.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

ext {
    set('springCloudVersion', "2021.0.0")
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
    implementation 'org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

test {
    useJUnitPlatform()
}

implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' 을 추가한다.

ClientApplication.java

@SpringBootApplication
@EnableFeignClients
public class ClientApplication {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(ClientApplication.class, args);
    }
}

@EnableFeignClients 를 선언하여 feign 을 활성화 시켜 준다.

FallbackController.java

@Slf4j
@Controller
@AllArgsConstructor
public class FallbackController {

    private final FallbackClient fallbackClient;

    @RequestMapping(method = RequestMethod.GET, value = "/client/feign/fallback/timeout")
    public @ResponseBody
    String fallbackClient_timeout() {
        String responseStr = fallbackClient.timeout();
        log.debug("responseStr = {}", responseStr);
        return responseStr;
    }

    @RequestMapping(method = RequestMethod.GET, value = "/client/feign/fallback/exception")
    public @ResponseBody String fallbackClient_exception() {
        try {
            String responseStr = fallbackClient.exception();
            log.debug("responseStr = {}", responseStr);
            return responseStr;

        }catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
}

FallbackClient.java

feign client 에대한 설정 http://localhost:8083 default url에 각 메소드 별로 path를 지정하여 호출 할 수있다.

@FeignClient(
        name="FallbackClient"
        ,url = "http://localhost:8083"
)
public interface FallbackClient {

    @RequestMapping("/product/timeout")
    String timeout();

    @RequestMapping("/product/exception")
    String exception();
}
  • name
    • bean name 이 아니며, feign client 의 이름이다. eureka 를 이용하여 discovery pattern 을 사용하면, 해당 discovery 된 application-name 을 적어 주면 된다.
  • url
    • 디폴트 url 정보를 입력한다.
반응형

'Spring > Spring Cloud' 카테고리의 다른 글

spring open feign retry (circuit breaker)  (0) 2022.01.14
open feign error decoder custom  (0) 2022.01.14
open feign log 설정  (0) 2022.01.14
Spring Open Feign  (0) 2022.01.14
circuit breaker (hystrix and the resilience4j)  (0) 2021.07.21