SAP / cloud-sdk-java

Use the SAP Cloud SDK for Java to reduce development effort when building applications on SAP Business Technology Platform that communicate with SAP solutions and services such as SAP S/4HANA Cloud, SAP SuccessFactors, and many others.
Apache License 2.0
22 stars 13 forks source link

SAP BTP Cloud SDKによるResilience機能を利用したS/4HANA ODataサービス呼出時のタイムアウト設定について #595

Open kazumi-senzaki opened 5 days ago

kazumi-senzaki commented 5 days ago

SAP BTP Cloud SDKによるResilience機能を利用したS/4HANA ODataサービス呼出時のタイムアウト設定で、タイムアウト値を2分以上たとえば「5分」に設定しても、2分でタイムアウトしてしまいます。「1分」にすると1分でタイムアウトするため、設定は効いているようですが、2分以上の指定が適用されないのが仕様なのか製品不具合なのかご確認をお願いします。なお、以下のアクセスパスにおいて、SAP Cloud SDK以外のタイムアウト設定についても確認しており、「2分」が設定されている箇所が無いことは確認済みとなります。

アクセスパス:Standalone Approuter → BTP Java アプリ (SAP Cloud SDK) → SAP Cloud Connector → Load Balancer → Web Dispatcher → S/4HANA (OData)

newtork commented 5 days ago

You can set the maximum HTTP client timeout globally, e.g. 10min:

HttpClientFactory factory = DefaultHttpClientFactory.builder().timeoutMilliseconds(10 * 60 * 1000).build();
HttpClientAccessor.setHttpClientFactory(factory);
For sake of completeness this is also possible for Apache HTTP Client 5 ```java ApacheHttpClient5Factory factory = new ApacheHttpClient5FactoryBuilder().timeout(Duration.ofMinutes(10)).build(); ApacheHttpClient5Accessor.setHttpClientFactory(factory); ```
kazumi-senzaki commented 3 days ago

HTTPクライアントの最大タイムアウトは、グローバルに設定できます(例:10分)。

HttpClientFactory factory = DefaultHttpClientFactory.builder().timeoutMilliseconds(10 * 60 * 1000).build();
HttpClientAccessor.setHttpClientFactory(factory);

完全を期すために、これはApache HTTP Client 5でも可能です

ご回答ありがとうございます。 再度の確認となり申し訳ありませんが教えてください。 ご案内頂いたHTTPクライアントの最大タイムアウトの設定は、SAP BTP Cloud SDKのResilience機能のタイムアウト設定と合わせて行う必要があるという認識で合っておりますでしょうか?

KavithaSiva commented 3 days ago

By default in the SDK, for HTTP clients, two minutes is set as the connection timeout. You can increase this by using the code snippets provided by my colleague.

You don't need the resilience timeout configured if you are solely interested in configuring timeouts for the HttpClient. But, if the resilience timeout is being used for more operations in addition to HttpClients, you need to configure both timeouts.