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 을 호출해 값을 받아오고,
결과값을 리턴하는 것을 확인할 수 있다.