feignClient 실습

김성환·2022년 10월 1일
0

실습

목록 보기
5/6

feignClient란

Rest Call을 추상화 한 spring cloud 넷플릭스 라이브러리이다.
호출하려는 HTTP EndPoint에 대한 인터페이스를 생성하여 사용한다.(메서드 자체를 구현하는 것이 아니다)
micro 서비스간의 통신을 위해 사용되기도 하며, 동기 방식으로 동작한다.

의존성 추가(gradle)

implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign'

사용법

  1. Main클래스에 @EnableFeignClients 어노테이션 붙이기
    @EnableFeignClients란 서비스에서 feignClient를 사용할 수 있게 해주는 어노테이션이다.
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
  1. 서비스를 사용하기 위해 사용할 서비스의 인터페이스를 구현
    예를들어 Main서비스에서 Order서비스를 호출하고 싶다면, Main서비스에 Order서비스의 feignclient인터페이스를 구현해야 한다.
    단, 사용할 feignclient의 서비스 이름을 지정할때, 반드시 유레카 서버에 등록된 서비스 이름으로 지정하여야 한다.

    위의 예시는 MAIN-SERVICE와 ORDER-SERVICE가 유레카 서버에 등록되어 있는 모습을 보여준다.
@FeignClient(name = "order-service")
public interface OrderServiceClient {
    @GetMapping("/{user-no}")
    public String findOrder(@PathVariable("user-no") String userId);
}

위의 예시는 유레카 서버에 등록된 order-service의 feignclient 인터페이스를 구현한 코드이다.
order-service의 경우 findOrder라는 메서드가 실제로 구현되어 있어야 한다.

@RestController
public class OrderController {
    @GetMapping("/{user-no}")
    public String findOrder(@PathVariable("user-no") String userId){
        return userId+"hello!!";
    }
}
  1. 호출
    호출하기 위해서는 만들어진 인터페이스를 사용하면 된다.(JPA처럼 사용)
    이때, feignclient의 의존성 주입을 해주어야 한다.(예제에서는 생성자 주입)
@RestController
public class OrderController {
    private OrderServiceClient orderServiceClient;
    @Autowired
    public OrderController(OrderServiceClient orderServiceClient) {
        this.orderServiceClient = orderServiceClient;
    }
    @GetMapping("/main")
    public String startMain(){
        String result = orderServiceClient.findOrder("1010");
        return result;
    }
}

위의 예제는 Main서비스에서 order서비스의 findOrder(localhost:8081/{user-no})를 호출한 것이다.
결과는 다음과 같다.

profile
개발자가 되고 싶다

0개의 댓글