面试题:SpringBoot调用http服务几种方式

面试官:SpringBoot提供了哪些调用Http服务的方式呢?

我们来盘一盘Spring提供的调用Http服务的方式:

方式一:RestTemplate

RestTemplate默认的底层实现是JDK的HttpURLConnection。当然如果要支持负载均衡可以加上@Loadbalancer注解来实现,这样可以集成到注册中心通过服务名称来调用eureka或nacos上的服务。

方式二:Feign

Feign默认底层实现也是JDK的HttpURLConnection(当然可以换httpclient、okhttp),Feign默认就集成了Ribbon做负载,由于Ribbon的停更,新近的SpringBoot版本已经支掉Ribbon了换成spring自己的Loadbalancer。

方式三:WebClient

spring5后spring就建议使用响应式的WebClient作为Http的请求,WebClient也可以+@Loadbalancer来实现负载均衡。WebClient是响应式的

方式四:HttpInterfaces

SpringBoot3.x增加了@HttpInterfaces注解,它底层默认实现是WebClient当然为了支持负载也S可以自己加一下@Loadbalancer注解。

那问题来了,他们都能实现相同的功能,怎么选择呢?

  • RestTemplate 使用 Java Servlet API,是同步、阻塞的方法。
  • WebClient 是异步、非阻塞的,在等待响应返回时不会阻塞正在执行的线程。只有当响应就绪时,才会产生通知。相对阻塞的RestTemplate非阻塞的WebClient有一定优势,这也是后面spring官方也在推荐使用的。

感觉还是得看自己项目的需要,如果项目已经有了也能用,就不用去改变了;如果项目上有性能或者响应式的需要,可以考虑换一换,或者新项目尝试用一下新的;如果追求性能到是可以做个测试比较一下,感觉webclient会好点。@HttpInterfaces生态还没起来很多相应的中间件也还没起来,不过WebClient到是可以尝试下。个人感觉一个项目还是会存在以上几种的共存的状态。

不过有这疑问就是spring里有了RestTemplate 、WebClient、Feign这么多http客户端工具为什么还要出一个HttpInterfaces直接让Feign也集成WebClient不就可以了吗?希望知道答案的朋友分享下。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

栈江湖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值