SDK プロジェクトでのタイムアウトの構成および管理する方法
概要
タイムアウトは、停止前にリクエストと応答を返す間にプロセスが待機する時間として定義されます。
OpenLegacy システムのタイムアウトは、OpenLegacy のコア処理ではなく、バックエンド処理とネットワークの待ち時間と関連付けられます。したがって、タイムアウトクロックはバックエンドへの同期呼び出しでスタートし、ペイロード送信時間 + バックエンド処理時間 + 最初の 1 バイトが到着するまでの時間のみが含まれます。
タイムアウトは application.yml ファイルプロパティで構成されます。 値はタイムアウトプロパティを RpcJsonRequest / RpcRequest で設定、または SDK 使用時にパラメータを RpcSession.doAction(...) メソッドへパスすることで無効化できます。
注: ほとんどの場合バックエンドではミリ秒を使用しますが、少ないですが秒の場合があり、特定のコネクタのタイムスケールの検証は開発者の責任です。
API-レベルのアイムアウト
一部のタイムアウトレベルは、以下のように定義できます。
デフォルトタイムアウト - 他のタイムアウト構成が指定されていない場合は、すべての作業に適用されます。
タイムアウトが構成されていない場合、デフォルトは無限です。
バックエンドで定義されたタイムアウト - 他の構成が指定されていない場合は、それぞれのバックエンドのすべてのエンティティに適用されます。
デフォルトタイムアウト構成は無効化されます。
エンティティアクション-レベルのタイムアウト - 指定アクションに適用されるため、複数のタイムアウトがエンティティアクションレベルで定義できますが、アクション毎に定義できるタイムアウトは 1 つのみです。
このレベルはバックエンドのタイムアウト構成を無効化します。
作業 - 指定アノテーション(注釈)に適用されます。
このレベルはバックエンドのタイムアウト構成を無効化します。
タイムアウトは、秒で定義される AS/400 を除き、ミリ秒で定義されます。
例
構成はタイムアウトレベルの組み合わせの場合があります。したがって、たとえば、2 つのバックエンド、Oracle と SQL サーバーがあり、サービスアカウントが API とすると、タイムアウトは以下のように構成できます。
タイムアウト:
ol:
timeout:
entity:
"[com.backend1.openlegacy.Entity1]": 500
"[com.backend1.openlegacy.Entity2]": 5000
"[com.backend2.openlegacy.Entity1]": 1500
operation:
"[TestOperation]": 5
この数値は、Backend1 のEntity1 で使用されるタイムアウトはバックエンドへの同期呼び出しの開始から 0.5 秒でトリガーされ、応答の最初の 1 バイトが到着するまでを意味します。Entity2 タイムアウトは 5 秒で定義されます。
手順
SDK プロジェクトを生成後、 リソースフォルダの application.yml ファイルを開き、コード(SDK タイムアウト)を追加し、API に接続し、エンティティを生成します。次に、同じ値の同じコードが API の application.yml に表示されます。
SDK プロジェクトと API プロジェクトを接続後は、タイムアウトを定義する必要があります。
同じ API に接続された同じタイプのバックエンドが 2 つ以上ある場合は、すべて SDK タイムアウトとなります。変更するには、application.yml を開くと、赤で # とマークされたバックエンドの名前があり、そこにタイムアウトを追加し、グローバルバックドエンドのタイムアウトから分離します。
タイムアウトを使用するには、タイムアウト値を定義する必要があります(値はミリ秒で定義する必要があります)。そのためには、application.yml を開き、以下のプロパティ(エンティティタイムアウト)を追加します。これがエンティティレベルのタイムアウトです。
ここで、API のサービスパッケージに移動し、.impl クラスを開き(右クリック → Java エディタ)、数値を doAction メソッドの最後に追加します(数字は秒で定義される AS/400 を除き、ミリ秒で定義する必要があります)(メソッドタイムアウト)。
異なるタイムアウト定義間の優先度:
RpcJsonRequest/RpcRequest およびメソッドタイムアウトが最高優先度です。
特定の作業/エンティティの application.yml は、前項で述べられていないすべてを無効化します。
RpcAction/RpcOperation/OperationDefinition を使用してプロジェクトをプログラムで無効化/バックエンドグローバル設定
application.yml のバックエンド設定
application.yml のプロジェクト設定
SDK タイムアウト:
ol:
timeout:
backend:
Type-of-Backend: 1000
タイムアウトが異なる同じバックエンド:
# Entity-name
ol:
timeout:
Type-of-Backend: 250
構成を使用する作業タイムアウト
# Entity-name
ol:
timeout:
operation:
"[Name of the Operation]":(numeric value of the timeout)
アノテーション(注釈)を使用する作業タイムアウト
@RpcOperation(timeout = 3)
TestOperation
リクエストタイムアウト
エンティティタイムアウト:
ol:
timeout:
entity:
"[Name of the Entity package (can be found in the SDK).entity]":(numeric value of the timeout)
メソッドタイムアウト:
entity = spOracleSdkRpcSession.doAction(ActionUtil.getRpcAction(LongProcedure.class), entity,(numeric value of the timeout));