WebClient 与 RestTemplate

WebClient vs RestTemplate

根据 spring 5:

WebClient is an interface representing the main entry point for performing web requests.

It has been created as a part of the Spring Web Reactive module and will be replacing the classic RestTemplate in these scenarios. The new client is a reactive, non-blocking solution that works over the HTTP/1.1 protocol

这是否意味着,如果我们想升级到 Spring 5,我们需要使用 RestTemplate 为旧应用程序重新编码?

或者在 Spring 5 中有一些使用 RestTemplate 的解决方法?

不,RestTemplate 将继续存在(至少现在)。您不必将其替换为 WebClient。
主要区别之一是 RestTemplate 是 同步和阻塞 即,当您进行休息呼叫时,您需要等到响应返回才能继续进行。

但是WebClient与此完全相反。调用者无需等到响应返回。相反,他会在有回复时收到通知。

如果您需要这样的功能,那么是的,您需要将 Resttemplate 替换为 WebClient。
实际上,您可以使用 .block() 在 webclient 中实现类似同步处理的 Rest 模板。但是另一种方式是不行的。

编辑:

RestTemplate 将在未来版本 (> 5.0) 中弃用,并且以后不会添加主要的新功能

根据 Java Doc,RestTemplate 将处于维护模式。 Spring 团队建议尽可能使用 WebClient:

NOTE: As of 5.0, the non-blocking, reactive org.springframework.web.reactive.client.WebClient offers a modern alternative to the RestTemplate with efficient support for both sync and async, as well as streaming scenarios. The RestTemplate will be deprecated in a future version and will not have major new features added going forward.

WebClient 是非阻塞 客户端,RestTemplate 是阻塞 客户端。

长期以来,spring作为网络客户服务。在引擎盖下,RestTemplate使用JavaAPIAPI,这是基于主题model.This意味着事情将是阻塞直到客户端收到响应。阻塞代码的问题是由于任意串内存和cpu个循环的存在。让我们考虑许多正在等待产生 result.Sooner 或更高版本所需的低服务的应用程序,收集对结果的请求。结果,程序产生了许多问题,导致线程池耗尽或占用所有可用内存。由于cpu切换,我们也可以体验性能表现。

Spring WebClient vs. RestTemplate

WebClient 支持异步和同步调用。 RestTemplate 只支持同步调用。 即使 RestTemplate 被弃用,旧代码也不需要更改(只要您不需要异步行为)

RestTemplate 并没有真正弃用。但是以后不会进化了。所以坚持 RestTemplate 是完全有效的,如果它能满足你的需要。

另一种表达方式是,如果您需要特定的使用模式,例如流式传输、scatter/gatter 或自定义超时,RestTemplate 将不涵盖这些内容,您需要使用 WebClient 代替。

现在在阻塞应用程序中使用 WebClient 也很好。使用 block() 不应该在那里受到伤害,并且 Spring MVC 控制器确实部分支持反应式 return 类型。