Spring/Spring Cloud

spring open feign 예제

아이티.파머 2022. 1. 14. 11:34
반응형

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 정보를 입력한다.
반응형