猿问

微服务假装调用的无限循环?

我对假装调用的无限循环的行为方式感到困惑。一个例子:假设我有 2 个 API,A 和 B。如果我调用 API A,API A 又通过伪造 HTTP 调用调用 API B,而 API B 又通过伪造再次调用 API A,它会识别出这一点并打破调用链吗?


调用的快速流程图:A -> B -> A -> B ... 无限重复?


我没有尝试过这段代码,它只是一个想法。但我假设 spring-cloud-starter-feign 会提供一些方法来解决这个问题?这个假设是否正确?


    @PostMapping(RestJsonPath.API_A)

    ResponseEntity<byte[]> apiA();


    @PostMapping(RestJsonPath.API_B)

    ResponseEntity<byte[]> apiB();

会一直执行到超时还是hystrix会停止?


浮云间
浏览 113回答 1
1回答

芜湖不芜

长话短说: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)由开发人员决定。
随时随地看视频慕课网APP

相关分类

Java
我要回答