关于 Jersey,它允许使用属性 [1] 选择底层客户端传输连接器,如以下示例所示:
Client client = ClientBuilder.newBuilder().
property(
ClientProperties.CONNECTOR_PROVIDER,
"some.package.to.XXXConnectorProvider"
).
build();
此机制也适用于 MicroProfile Rest Client,通过在
RestClientBuilder
中设置此属性,或者通过实现 RestClientBuilderListener
或 RestClientListener
并将此配置应用于 RestClientBuilder
来实现更灵活。 [2],[3]
但是,RESTEasy 文档指出,要选择其他后端 [4],例如
JettyClientEngine
、ReactorNettyClientHttpEngine
和 VertxClientHttpEngine
,不仅必须使用其他模块 — org.jboss.resteasy:resteasy-client-jetty
、org.jboss.resteasy:resteasy-client-reactor-netty
或 org.jboss.resteasy:resteasy-client-vertx
—存在于类路径中,但客户端也必须手动构建,如下所示:
ResteasyClient client = ((ResteasyClientBuilder)ClientBuilder.newBuilder()).
clientEngine(
new JettyClientEngine(new HttpClient())
).
build();
此外,没有关于如何在使用 MicroProfile Rest Client[5] 时选择这些后端的指南。
是否有任何方法可以配置 RESTEasy 客户端,以通过与标准 Jakarta RESTful Web 服务客户端 API 和 Eclipse MicroProfile Rest 客户端兼容的属性或其他方法来选择其后端?
[1] https://eclipse-ee4j.github.io/jersey.github.io/documentation/latest31x/client.html
[4] https://docs.jboss.org/resteasy/docs/6.2.10.Final/userguide/#_transport_layer
[5] https://docs.jboss.org/resteasy/docs/6.2.10.Final/userguide/#_microprofile_rest_client
如果您以编程方式构建客户端,则可以使用
register()
方法来注册客户端。比如:
CountriesServiceClient client = RestClientBuilder.newBuilder()
.register(new JettyClientEngine(new HttpClient()))
.baseUrl(new URL(serverHost))
.build(CountriesServiceClient.class);
为注入的客户端执行此操作可能有点棘手,也许应该修复一些问题。然而,像这样的东西应该有效。
public class JettyClientEngineProvider extends JettyClientEngine {
public JettyClientEngineProvider() {
super(new HttpClient());
}
}
然后您只需将
@RegisterProvider(JettyClientEngineProvider.class)
添加到您的客户端界面即可。
我还提交了 RESTEASY-3539 以更好地记录这一点并添加更好的方法来发现客户端引擎。