TL;博士:
Feign 将在从 A 到 B 的初始请求上保持连接打开,直到预先配置的超时开始。此时,Feign 将使请求超时,如果您指定了 Hystrix 回退,Spring 将使用您的 Hystrix 回退作为回复。
解释:
spring-boot-starter-feign 为编写 HTTP 请求代码提供了一个抽象层。它不会处理代码中的潜在循环或循环。
这是来自他们的教程网站的示例 spring boot feign 客户端用于演示:
@FeignClient(value = "jplaceholder",
url = "https://jsonplaceholder.typicode.com/",
configuration = ClientConfiguration.class,
fallback = JSONPlaceHolderFallback.class)
public interface JSONPlaceHolderClient {
@RequestMapping(method = RequestMethod.GET, value = "/posts")
List<Post> getPosts();
@RequestMapping(method = RequestMethod.GET, value = "/posts/{postId}", produces = "application/json")
Post getPostById(@PathVariable("postId") Long postId);
}
首先请注意,这是一个接口- 所有代码都是 Spring 在启动时自动生成的,并且该代码将对通过注释配置的 url 发出 RESTful 请求。例如,第二个请求允许我们传入一个路径变量,Spring 将确保它位于出站请求的 URL 路径上。
这里要强调的重要一点是,这个接口只负责 HTTP 调用,而不是任何潜在的循环。使用此接口的逻辑(我可以像注入任何其他 Spring Bean 一样将其注入任何其他 Spring Bean),由开发人员决定。
此示例来自的 Github 存储库。
spring-boot-starter-openfeign 上的 Spring Boot 文档。
希望这可以帮助您了解 openfeign 项目的目的,并帮助您了解处理应用程序代码中的循环和无限循环取决于您。
至于 Hystrix,只有当这些生成的 HTTP 请求之一失败时,该框架才会发挥作用(如果它已启用),无论是超时、4xx 错误、5xx 错误还是响应反序列化错误。您将 Hystrix 配置为合理的默认值或 HTTP 请求失败时的回退。
这是关于 Hystrix 的一个不错的教程。
需要指出的一点是,Hystrix 后备必须实现您的 Feign 客户端接口,并且您必须在注释中将此类指定为您的 Hysterix 后备@FeignClient
。如果 Feign 请求失败,Spring 和 Hystrix 会自动调用你的 Hystrix 类。