Retrofit 和 OkHttp 适合 Java EE/Server-side 使用吗?

Are Retrofit and OkHttp suitable for Java EE/Server-side use?

我喜欢来自 Square 的 Retrofit and OkHttp rest/http 库的 API。我正在评估编写服务器端休息客户端的选项。对于基于 SOAP 的 Web 服务的每个请求,我都必须使用另一个 restful Web 服务,因此我需要一个休息客户端。

我的问题是,Retrofit 和 OkHttp 是否适合在高度并发的 Web 应用程序中在服务器端使用,或者是否可能存在已知或其他问题,这些问题源于这些 API 主要设计用于在外部使用服务器端?

阅读文档并细读代码,我没有突然想到这些库不适合。但我也不想成为小白鼠。有没有人在高 load/concurrency 下遇到任何服务器端使用问题?有成功吗?这些库的开发团队中的任何人都愿意发表评论吗? ;)

我们在 Square Cash 服务器上使用 OkHttp,我们没有遇到任何问题。

一些默认设置不适合服务器端使用,例如每个主机的最大并发请求数默认为5。

https://github.com/square/okhttp/issues/4354 上对此进行了一些讨论。

在微服务架构世界中(使用 Spring 框架),Retrofit/Okhttp 可能不适合作为服务间通信的 REST 客户端。使用 WebClient/RestTemplate 与出于相同目的使用改造相比至少具有以下优点:

  1. RestTemplate/WebClient 可以轻松配置以利用客户端负载平衡 (Ribbon),从而可以在各种实例或另一个微服务之间轮换请求。
  2. Hystrix 可以轻松配置 RestTemplate,从而提高整个系统的容错能力(断路器模式)w.r.t 服务间通信。
  3. 服务发现可以使用 Eureka 或 Consul 轻松配置,因此客户端不需要知道目标 Web 服务的 host/port/protocol。我们只需要启用发现客户端。

或者,您也可以探索 Feign,它是一个类似于 retrofit 的声明式 Web 服务客户端,但具有 RestTemplate 的所有优点。

您还可以在以下文章中获得战利品:

https://www.javacodemonk.com/retrofit-vs-feignclient-on-server-side-with-spring-cloud-d7f199c4