将 HTTP/2 与 JAX-RS 客户端一起使用
Use HTTP/2 with JAX-RS client
我正在尝试使用 JAX-RS HTTP/2 服务器和客户端。服务器端可以工作,但我无法使用 JAX-RS 抽象使客户端正常工作。我使用 Jersey2 JAX-RS 实现和嵌入式 Jetty HTTP 服务器。我还使用 Jersey 代理客户端通过接口直接使用 API。客户端构建方法如下
import org.glassfish.jersey.client.proxy.WebResourceFactory;
import javax.ws.rs.client.ClientBuilder;
(...)
<T> T getClient(int port, Class<T> resourceInterface) {
return WebResourceFactory.newResource(
resourceInterface,
ClientBuilder.newBuilder()
.build()
.target("https://localhost:" + port)
);
}
您有使用相同抽象级别的解决方案吗?
编辑
根据@sbordet 的回答,我实现了一个基于 JettyClient 支持 HTTP/2 的客户端连接器。代码在 GitHub and artifact is on .
Jersey 允许使用 transport connectors.
自定义传输
已经有一个使用 Jetty 的 HttpClient
的 Jersey 客户端传输,但它被配置为使用 HTTP/1.1,而不是 HTTP/2,请参阅 https://github.com/jersey/jersey/blob/master/connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnector.java。
我猜你的选择是自己实现 Jersey ConnectorProvider
和 Connector
,主要基于那些已经可用的,但是配置 HTTP/2 传输如码头 documentation;或要求 Jersey 开发人员在现有 JettyConnector
中创建 HttpClient
实例可覆盖,以便您可以使用 HTTP/2 自定义 HttpClient
传输。
请注意,如果您使用 HTTP/2,您将需要支持 ALPN,如 this documentation 中所述。
我正在尝试使用 JAX-RS HTTP/2 服务器和客户端。服务器端可以工作,但我无法使用 JAX-RS 抽象使客户端正常工作。我使用 Jersey2 JAX-RS 实现和嵌入式 Jetty HTTP 服务器。我还使用 Jersey 代理客户端通过接口直接使用 API。客户端构建方法如下
import org.glassfish.jersey.client.proxy.WebResourceFactory;
import javax.ws.rs.client.ClientBuilder;
(...)
<T> T getClient(int port, Class<T> resourceInterface) {
return WebResourceFactory.newResource(
resourceInterface,
ClientBuilder.newBuilder()
.build()
.target("https://localhost:" + port)
);
}
您有使用相同抽象级别的解决方案吗?
编辑
根据@sbordet 的回答,我实现了一个基于 JettyClient 支持 HTTP/2 的客户端连接器。代码在 GitHub and artifact is on
Jersey 允许使用 transport connectors.
自定义传输已经有一个使用 Jetty 的 HttpClient
的 Jersey 客户端传输,但它被配置为使用 HTTP/1.1,而不是 HTTP/2,请参阅 https://github.com/jersey/jersey/blob/master/connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnector.java。
我猜你的选择是自己实现 Jersey ConnectorProvider
和 Connector
,主要基于那些已经可用的,但是配置 HTTP/2 传输如码头 documentation;或要求 Jersey 开发人员在现有 JettyConnector
中创建 HttpClient
实例可覆盖,以便您可以使用 HTTP/2 自定义 HttpClient
传输。
请注意,如果您使用 HTTP/2,您将需要支持 ALPN,如 this documentation 中所述。