如何为 MicroProfile Rest 客户端选择 RESTEasy 客户端后端?

问题描述 投票:0回答:1

关于 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

[2] https://download.eclipse.org/microprofile/microprofile-rest-client-3.0/microprofile-rest-client-spec-3.0.html#programmatic_lookup

[3] https://download.eclipse.org/microprofile/microprofile-rest-client-3.0/microprofile-rest-client-spec-3.0.html#_provider_declaration

[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

jersey jax-rs resteasy microprofile
1个回答
0
投票

如果您以编程方式构建客户端,则可以使用

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 以更好地记录这一点并添加更好的方法来发现客户端引擎。

© www.soinside.com 2019 - 2024. All rights reserved.