SpringCloud微服务调用的超时机制和CompletableFuture异步调用的超时机制原理一样吗?

SpringCloud微服务调用的超时机制和CompletableFuture异步调用的超时机制原理一样吗?

使用SpringCloud的OpenFeign进行微服务调用的时候,如果A微服务去调用B服务的方法,1s内没有返回结果,就相当于超时了,A微服务会抛出异常。默认最大等待时间是1s可以手动调整。

而当我们使用CompletableFuture异步执行方法的时候,也可以设置最大的等待时间,比如说设置2s,那么当前方法在2s内如果没有接收到异步方法的返回结果的话,就会抛出异常。

可以发现二者都有个最大等待时间,它们底层的原理一样吗?

CompleteFuture异步调用的时候可以设置最长等待时间,原理是什么
CompletableFuture 类中有一个方法叫 orTimeout,这个方法允许你为异步计算设置一个最大等待时间。如果在这个时间内计算没有完成,将会抛出一个 TimeoutException。这个机制确保了即使遇到长时间的阻塞操作,也不会无限制地等待下去,从而防止了潜在的系统资源浪费和性能下降。

具体来说,orTimeout 方法内部使用了 ScheduledExecutorService 来实现超时控制。当调用 orTimeout 方法时,它会创建一个定时任务,在指定的超时时间后执行。如果主任务在这个时间内完成,定时任务就会被取消;如果主任务没有在规定的时间内完成,定时任务就会触发并执行一个操作,这个操作会中断正在执行的异步任务,并且将异常 TimeoutException 传递给后续的操作。

这种设计使得 CompleteFuture 在进行异步操作时,能够有效地进行超时控制,避免因长时间等待而造成不必要的资源占用和性能影响。

这个原理和SpringCloud微服务之间调用的超时时间原理一样吗?
Spring Cloud中微服务之间的调用超时时间原理与CompletableFuture的超时机制不完全相同。

在Spring Cloud中,微服务间的调用通常使用Open Feign进行,而Feign是一个声明式的Web Service客户端,它简化了微服务之间的通信过程。当使用Feign进行服务调用时,可以通过声明式的接口和注解来配置服务调用的各种参数,包括连接超时(connect timeout)和读取超时(read timeout)。这些超时设置通常通过配置文件或注解的方式来实现,而不是像CompletableFuture那样直接在代码中设置超时时间。

虽然两者都提供了超时机制,但它们的实现方式和使用场景有所不同。CompletableFuture的orTimeout方法提供了一种编程式的方式来处理异步操作的超时,而Spring Cloud中的Feign客户端则提供了一种更高级、更适合微服务架构的声明式超时配置方式。

总的来说,无论是CompletableFuture还是Spring Cloud Feign,它们都提供了超时机制来防止无限制的等待,确保系统的稳定性和响应性。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr-X~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值