FeignClient with Multi-Product

2024, Feb 11    
feign multi product

Question

  • 업스트림 어플리케이션이 multi product구조로 변경되면서 동일한 API 호출을 해야할 때, FeignClient인터페이스 한개로 여러 번 호출이 가능한지…

Thinking..

  • spring-cloud-openfeign-core-3.1.6.jar 기준으로 FeignClient.class를 보면
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface FeignClient {
    @AliasFor("name")
    String value() default "";

    String contextId() default "";

    @AliasFor("value")
    String name() default "";

    /** @deprecated */
    @Deprecated
    String qualifier() default "";

    String[] qualifiers() default {};

    String url() default "";

    boolean decode404() default false;

    Class<?>[] configuration() default {};

    Class<?> fallback() default void.class;

    Class<?> fallbackFactory() default void.class;

    String path() default "";

    boolean primary() default true;
}
  • url에 외부 주소를 설정해서 작성할 수 있고
  • url이나 name을 동적으로 변경할 수 있고,
  • 또한 yml로도 주입하는 등 여러 방법을 생각해볼 수 있지만
  • 기본적으로 제공되는 변수만으로 eureka에 등록된 여러 어플리케이션을 멀티로 호출할 수 있지 않습니다.

Conclusion

  • FeignClient 인터페이스를 여러 개 생성해서 각 컨테이너별로 호출하는 구조로 작업을 했지만,
  • 항상 멀티 프로덕트 컨테이너를 호출하는 것이 아니라, 조건에 따라 호출되는 컨테이너가 다르다면
  • 여러 컨테이너에 대한 호출을 동적으로 처리하는 별도의 로직이나 구현이 필요합니다.
    • 중간에 분배기 역할을 하는 서비스를 둘 수도 있습니다.
  • 즉, Feign 표준 기능으로는 멀티 프로덕트 어플리케이션 호출할 수 있는 속성을 갖고 있지 않습니다.