Spring Consul Feign 연동하기

By | 2022년 10월 13일
Table of Contents

Spring Consul Feign 연동하기

Consul 설치

여기 를 참조하여 개발용 Consul 서버를 설치한다.

Spring Boot 애플리케이션 생성

간단한 Spring Boot 앱을 생성한다.

Consul Discovery 활성화

의존성 추가

spring-cloud-starter-consul-discovery, spring-boot-starter-actuator 를 추가해준다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery:3.1.2'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

애플리케이션 수정

@RestController
@SpringBootApplication
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}
spring:
  application:
    name: myApp
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        instance-id: ${spring.application.name}:${random.value}
        serviceName: myprefix-${spring.application.name}
        healthCheckPath: /actuator/health
        healthCheckInterval: 15s

확인하기

브라우저에서 http://localhost:8080/ 접속하면 서비스가 실행중인것을 확인할 수 있다.

브라우저에서 http://localhost:8500/ 접속 후,
서비스탭에 들어가면 서비스가 등록된 것을 확인할 수 있다.

(healthCheckInterval 이 15초이므로 15초가 지나야 확인가능하다.)

Feign 연동하기

의존성 추가

spring-cloud-starter-openfeign 을 추가한다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery:3.1.2'
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign:3.1.4'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

앱 수정 01

@EnableDiscoveryClient, @EnableFeignClients 를 추가한다.

@RestController
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
@RequiredArgsConstructor
public class Application {

    private final DiscoveryClient discoveryClient;

    @RequestMapping("/serviceUrl")
    public String serviceUrl() {
        List<ServiceInstance> list = discoveryClient.getInstances("myprefix-myApp");
        if (list != null && list.size() > 0) {
            return list.get(0).getUri().toString();
        }
        return null;
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}

http://localhost:8080/serviceUrl/ 에 접속하면,
serviceId 가 반환되는 것을 확인할 수 있다.

앱 수정 02

@RestController
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
@RequiredArgsConstructor
public class ConsulTestApplication {

    private final DistributionClient distributionClient;

    @RequestMapping("/use-feign")
    public String sendData() {
        return distributionClient.sendData("Lee");
    }

    @GetMapping("/data")
    public String test(@RequestParam(required = false) String query) {
        return "Hello " + query;
    }

    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

    public static void main(String[] args) {
        SpringApplication.run(ConsulTestApplication.class, args);
    }

}
@FeignClient(value = "myprefix-myApp")
public interface DistributionClient {

    @GetMapping(value = "/data", consumes = "application/json")
    String sendData(@RequestParam(required = false) String query);
}

http://localhost:8080/use-feign 에 접속하면,
feign 이 myprefix-myApp 서비스명으로 consul 로부터 호스트와 포트를 받아오고,
해당 서비스의 /data URL 을 호출해 값을 받아오고,
결과값을 리턴하는 것을 확인할 수 있다.

답글 남기기