Quarkus RestClient close()

use*_*947 4 quarkus

我想知道当通过 CDI 注入 RestClient 时 quarkus 的行为是什么。

在下面的例子中它会自动关闭客户端吗?

@Produces(APPLICATION_JSON)
@Consumes(APPLICATION_JSON)
@RegisterRestClient
@RegisterClientHeaders
public interface CarClient {
   @GET
   @Path("/cars/{id}")
   @Timeout(4500L)
   Car getCar(@PathParam("id") String id);
}

@Inject
@RestClient
CarClient carClient;
Run Code Online (Sandbox Code Playgroud)

或者 Quarkus 要求它像下面的示例一样扩展 AutoCloseable?

@Produces(APPLICATION_JSON)
@Consumes(APPLICATION_JSON)
@RegisterRestClient
@RegisterClientHeaders
public interface CarClient extends AutoCloseable {
   @GET
   @Path("/cars/{id}")
   @Timeout(4500L)
   Car getCar(@PathParam("id") String id);
}

@Inject
@RestClient
CarClient carClient;
Run Code Online (Sandbox Code Playgroud)

我们收到一些警告,我们需要确定所有内容是否都已关闭。

WARN: RESTEASY004687: Closing a class org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient43Engine instance for you. Please close clients yourself.
Run Code Online (Sandbox Code Playgroud)

PS:建议 quarkus 团队在警告中向有问题的客户端显示:)

use*_*947 6

Quarkus 团队表示,需要在 RestClient 接口中扩展 AutoCloseable,以便自动关闭连接。