Spring Cloud에서 Feign에 대한 일반적인 질문 요약

4268 단어 springcloudfeign
1. FeignClient 인터페이스, @GettingMapping 같은 조합 메모는 사용할 수 없음
코드 예:

@FeignClient("microservice-provider-user")
public interface UserFeignClient {
 @RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
 public User findById(@PathVariable("id") Long id);
 ...
}
이쪽 @RequestMapping(value = "/simple/{id}", method = RequestMethod.GET) @GetMapping("/simple/{id}") 으로 쓸 수 없습니다.
2. FeignClient 인터페이스에서 @PathVariable에 사용할 경우 value를 지정해야 합니다.
코드 예:

@FeignClient("microservice-provider-user")
public interface UserFeignClient {
 @RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
 public User findById(@PathVariable("id") Long id);
 ...
}
이쪽 @PathVariable("id") 의 "id"는 생략할 수 없습니다. 지정해야 합니다.
3. FeignClient 다중 매개 변수의 구조
microservice-provider-user 서비스를 요청하려면 다음과 같은 매개 변수가 여러 개 있습니다.http://microservice-provider-user/query-by?id=1&username=장삼이 어떡하지?
복잡한 객체를 직접 사용하려면 다음과 같이 하십시오.

@FeignClient("microservice-provider-user")
public interface UserFeignClient {
 @RequestMapping(value = "/query-by", method = RequestMethod.GET)
 public User queryBy(User user);
 ...
}
이 요청은 성공하지 않습니다. 매개 변수가 복잡한 대상이라면 GET 방법이라고 지정되었더라도 feign은 POST 방법으로 요청을 보냅니다.
정확한 쓰기 방법:
쓰기 1:

@FeignClient("microservice-provider-user")
public interface UserFeignClient {
 @RequestMapping(value = "/query-by", method = RequestMethod.GET)
 public User queryBy(@RequestParam("id")Long id, @RequestParam("username")String username);
}
쓰기 2:

@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient {
 @RequestMapping(value = "/query-by", method = RequestMethod.GET)
 public List<User> queryBy(@RequestParam Map<String, Object> param);
}
4. Feign Hystrix Stream을 사용하려면 추가 작업이 필요합니다.
Feign 자체가 Hystrix를 지원하는 것으로 알고 있습니다. @FeignClient(value = "microservice-provider-user", fallback = XXX.class) 를 사용하여 fallback의 클래스를 지정할 수 있습니다. 이 fallback 클래스는 @FeignClient에 표시된 인터페이스를 통합하면 됩니다.
하지만 Hystrix Stream을 사용하여 모니터링해야 하는 경우 기본적으로 액세스http://IP:PORT/hystrix.stream404입니다.Feign에 Hystrix Stream 지원을 추가하려면 어떻게 해야 합니까?
다음 두 단계가 필요합니다.
첫 번째 단계: 의존 추가, 예:

<!--  hystrix, feign hystrix, hystrix-metrics-event-stream, dashboard -->
<dependency>
 <groupId>org.springframework.cloud</groupId>
 <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
2단계: 시작 클래스에 @EnableCircuitBreaker 메모를 추가합니다. 예:

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
@EnableCircuitBreaker
public class MovieFeignHystrixApplication {
 public static void main(String[] args) {
 SpringApplication.run(MovieFeignHystrixApplication.class, args);
 }
}
이렇게 수정한 후 API에 액세스한 후http://IP:PORT/hystrix.stream, 수많은 API 모니터링 데이터를 보여줍니다.
5. 단일 Feign 구성을 사용자 정의해야 하는 경우 Feign의 @Configuration 메모 클래스는 @ComponentScan 패키지와 중첩될 수 없습니다.
패키지가 겹치면 모든 Feign Client에서 이 구성을 사용합니다.
6. 첫 번째 요청 실패
자세히 보기: Spring Cloud에서 Feign/Ribbon의 첫 번째 요청 실패를 해결하는 방법
7, @FeignClient 속성 참고 사항
(1) 서비스Id 속성이 효력을 잃었습니다.name 속성을 최대한 사용하십시오.예:

@FeignClient(serviceId = "microservice-provider-user")
이렇게 쓰는 것은 추천하지 않는다.

@FeignClient(name = "microservice-provider-user")
(2) url 속성을 사용할 때 이전 버전의 Spring Cloud에서name 속성을 제공할 필요가 없지만 새 버전(예를 들어 Brixton, Camden) @FeignClient에서name 속성을 제공해야 하고name, url 속성은 자리 표시자를 지원합니다.예:

@FeignClient(name = "${feign.name}", url = "${feign.url}")
총결산
이상은 바로 이 글의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 일정한 도움을 줄 수 있기를 바랍니다. 만약에 의문이 있으면 여러분은 댓글을 남겨 교류할 수 있습니다. 저희에 대한 지지에 감사드립니다.

좋은 웹페이지 즐겨찾기