シンプルなREST= JAX-RS 2.0クライアントAPIを使用してRESTリクエストを作成するWebサービスクライアントクラスを作成しました。各呼び出しのリクエストタイムアウト。リクエストのコードは次のとおりです。
Client client = ClientBuilder.newBuilder().build();
WebTarget resourceTarget = client.target(restServiceUrl)
.path("{regsysID}/{appointmentID}/")
.resolveTemplate("regsysID", regSysId)
.resolveTemplate("appointmentID", apptId);
Invocation invocation = resourceTarget.request(MediaType.APPLICATION_JSON).buildPut(null);
String createSessionJson = invocation.invoke(String.class);
これを行うには、最初にClientConfigを作成し、新しいクライアントを作成するときに引数として指定します。
import org.glassfish.jersey.client.ClientProperties;
ClientConfig configuration = new ClientConfig();
configuration.property(ClientProperties.CONNECT_TIMEOUT, 1000);
configuration.property(ClientProperties.READ_TIMEOUT, 1000);
Client client = ClientBuilder.newClient(configuration);
注:これはJAX-RS 2.1で利用可能な新しいメソッドです
これは非常に古い投稿ですが、以下のコードはジャージとレストイージーの両方で機能します。
ClientBuilder clientBuilder = ClientBuilder.newBuilder();
clientBuilder.connectTimeout(10, TimeUnit.SECONDS);
clientBuilder.readTimeout(12, TimeUnit.SECONDS);
Client client = clientBuilder.build();
Resteasyを使用すると、クライアントをビルドすることでこれを実現できます。
_Client client = new ResteasyClientBuilder()
.establishConnectionTimeout(2, TimeUnit.SECONDS)
.socketTimeout(2, TimeUnit.SECONDS)
.build();
_
これを移植可能にするために必要なClientBuilder.newClient(Configuration configuration)
を介して設定できる標準の構成プロパティのリストを見たことはありません。
まず、関連する依存関係を追加する必要があります(WildFly 10.1の場合):
<dependency>
<groupId>org.Apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.0.14.Final</version>
<scope>provided</scope>
</dependency>
次に-通常のApache HttpClientを作成し、1つのメソッドをオーバーライドしてRestEasy Engingeをプッシュすると、問題が発生します。
// create here a normal Apache HttpClient with all parameters, that you need
HttpClient httpClient = createHttpClient(connectTimeout,
socketTimeout,
connectionRequestTimeout,
maxTotalHTTPConnections);
// Deprecated Apache classes cleanup https://issues.jboss.org/browse/RESTEASY-1357
// Client Framework not honoring connection timeouts Apache Client 4.3 https://issues.jboss.org/browse/RESTEASY-975
ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient) {
@Override
protected void loadHttpMethod(ClientInvocation request, HttpRequestBase httpMethod) throws Exception {
super.loadHttpMethod(request, httpMethod);
httpMethod.setParams(new BasicHttpParams());
}
};
return new ResteasyClientBuilder().httpEngine(engine).build();
https://issues.jboss.org/browse/RESTEASY-975 をご覧ください。問題はバージョン3.1.0.Finalで解決されたようです。
Jersey 2.xを使用している場合、ここでそれは私のために働いているシンプルなソリューションです
import com.jclient.JClient;
Client c = Client.create();
WebResource webResource = c.resource("requestUrl");
c.setConnectTimeout(yourMins*60*1000);
古いJAX-RS 2.0 APIと古いResteasy実装にこだわっている人のために、このメソッドを使用できます。
Client client = new ResteasyClientBuilder()
.establishConnectionTimeout(3, TimeUnit.SECONDS)
.socketTimeout(5, TimeUnit.SECONDS).build();
名前にもかかわらず、socketTimeoutは「読み取りタイムアウト」の略です。ドキュメントでは、「データを待機するタイムアウト」の略であるためです。