为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

浮云间 2023-06-14 10:30:54
我对假装调用的无限循环的行为方式感到困惑。一个例子:假设我有 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会停止?
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

长话短说:

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)由开发人员决定。


查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信