ファイル転送サブシステム
ファイル転送サブシステムは、Remote Thing、ファイルリポジトリ、フェデレーションサーバー間のファイル転送を管理するために必要な手段を提供します。
特に指定されていないかぎり、エッジクライアントと ThingWorx Platform 間でファイル転送を行うには、転送の開始から完了までクライアントが接続した状態である必要があります。キュー可能な機能を使用してコピーを実行するよう ThingWorx Platform に命令することによって、エッジクライアントが切断されている状態で ThingWorx Platform からファイル転送を開始できます。キュー可能なファイル転送はオフラインキューに配置され、エージェントが接続されたときに実行されます。
* 
PostgreSQL を永続化プロバイダとして使用している場合、ThingWorx 高可用性のフェイルオーバーをサポートするためにオフラインキューが永続化されます。
転送が開始された後はエッジクライアントを切断できません。切断した場合、転送が失敗します。「キューが可能なファイル転送の有効期間 (秒)」コンフィギュレーション設定の値が経過しても、キューに入っているファイル転送が開始しない場合、そのファイル転送は期限切れになります。
通常は、ファイル転送は ThingWorx Platform によって制御されます。ただし、エッジ制御ファイル転送が可能であり、これはファイル転送に関連する Remote Thing に EdgeControlled Thing Shape を追加することによってアクティブ化します。エッジ制御ファイル転送では、ThingWorx Platform 上で転送元または転送先が FileRepository Thing として設定されている必要があります。エッジ制御ファイル転送では、転送はエッジクライアントによって制御されます。エッジによって、ファイル転送の進行に伴ってそのタイムスタンプを更新する Touch サービスが呼び出されます。これが行われない場合、ThingWorx Platform でファイル転送がタイムアウトします。その転送が成功したかエラーで終了したかがエッジによって示されます。
ファイル転送を開始するときに、metadata パラメータを指定することでコンテキストを埋め込むことができます。このフィールドは JSON オブジェクトであり、これは任意の JSON を含むことができます。一部の基本機能では、ThingWorx Platform でこのフィールドを使用してエッジクライアントに追加の命令を入力します。このような転送では、metadata フィールド内の情報が ThingWorx Platform 以外のプロセスによって修正されてはなりません。
フェデレーションサーバー間のファイル転送
フェデレーションサーバー間でファイルを転送するには、次の操作を行います。
* 
ファイルリポジトリのパス区切り記号としてはスラッシュ (/) が推奨されています。
1. ThingWorx ServerA と ThingWorx ServerB の間にフェデレーションを設定します。詳細については、フェデレーションの設定を参照してください。
2. FileRepository Thing Template を使用して、ThingAServerA に追加します。
a. ThingA「パブリッシュ」チェックボックスをオンにして、ほかの ThingWorx サーバーからアクセスできるようにします。
3. RemoteThingWithFileTransfer Thing Template を使用して、RemoteThingAServerB に追加します。
a. 「識別子」フィールドに、ThingA@ServerA と入力します。
4. ServerBSystemRepository ルートフォルダに、ファイル (たとえば、test.txt) をコピーします。
5. ServerBFileTransferSubsystem を開き、次のパラメータ値を使用して copy サービスを実行します。
sourceRepo: SystemRepository
sourcePath: /
sourceFile: test.txt
targetRepo: RemoteThingA
targetPath: /
targetFile: test.txt
その他のパラメータはデフォルト値から変更しないでください。
6. ServerA/ThingworxStorage/repository/ThingA フォルダに移動して、そこに test.txt ファイルが正しくコピーされていることを確認します。
コンフィギュレーション
ファイル転送の設定
データ型
デフォルト
注記
ファイル転送プールに割り当てられた最小スレッド数
NUMBER
10
ThreadPoolExecutor のコアプールサイズを定義します。このスレッドプールは、プラットフォーム制御のファイル転送ロジックを調整するために使用されます。
ファイル転送プールに割り当てられた最大スレッド数
NUMBER
10
ThreadPoolExecutor の最大スレッドプールサイズを定義します。
ThingWorx が停止した場合、非同期のファイル転送は失われる可能性があります。たとえば、この設定のデフォルト値は 10 であり、実行に時間がかかる 50 個のファイル転送がサブミットされているとします。ThingWorx が停止すると、40 個のファイルが失われます。
新しい作業スレッドの追加前におけるキューの最大エントリ数
NUMBER
100
ThreadPoolExecutor で使用されているキュー内のエントリ数の上限を定義します。
これにより、一度に許可されるアクティブな転送の数が制限されます。
アイドルスレッドのタイムアウト (秒)
NUMBER
600000
ThreadPoolExecutor でアイドルスレッドを保持する期間を定義します。指定した時間が経過すると、プールはスレッドを終了してコアプールサイズに戻ります。
ファイル転送アイドルタイムアウト (秒)
NUMBER
30
ファイル転送プロセス中の各ステップ (checksumReadFromBinaryFileWriteToBinaryFilevalidation) の間において、アイドルタイムアウトがチェックされます。定義されているタイムアウト時間よりステップに時間がかかる場合、転送はキャンセルされます。
* 
非同期コピーにはこのパラメータを使用しないでください。
最大ファイル転送ブロックサイズ (バイト)
NUMBER
128000
ReadFromBinaryFile および WriteToBinaryFile 操作に対してリクエストされるバイトの数を定義します。これは各書き込みのチャンクサイズを表します。
この変数によって、システムレベルでのファイル転送中の最大ブロックサイズを指定します。
EMS のコンフィギュレーションが優先されます。ただし、EMS で設定されている buffer_size がこの変数で指定されている値よりも大きい場合は、この変数の値がこのブロックサイズの上限になります。EMS でこれより大きいブロックサイズ (128 KB) が設定されている場合、この値を増やす必要があります。最大コンパイルレベルは 1 MB です。
最大ファイル転送サイズ (バイト)
NUMBER
100000000
コピー操作でサポートされる最大バイト数を定義します。
ソースファイルがこの値より大きい場合、転送は失敗し、エラーメッセージが表示されます。
オフラインキューで許可する最大ファイル転送数
NUMBER
50000
システムで許可されるオフラインキューファイル転送の最大数を指定します。
オフラインキューで 1 つの Thing に許可する最大ファイル転送数
NUMBER
10
Thing ごとに許可されるオフラインキューファイル転送の最大数を指定します。
キューが可能なファイル転送の有効期間 (秒)
NUMBER
86400
キューファイル転送がオフラインキューに存在できる最大時間を定義します。
ここで指定した時間が経過すると、ファイル転送がオフラインキューから除去されます。
許可されているエッジ制御ファイル転送の最大数
NUMBER
500
システムで許可されるアクティブなエッジ制御ファイル転送の最大数を定義します。
プラットフォーム全体で同時に実行されるエッジ制御転送の総数。これは、「新しい作業スレッドの追加前におけるキューの最大エントリ数」設定によって制御される、許可されている常時オンの転送の最大数とは別の設定です。
このプロパティの上限は、platform-settings.json ファイル内の MaxConcurrentFileTransfersEdgeCtrl によって制御されます。デフォルト値は 1000 です。
1 つの Thing に許可されているエッジ制御ファイル転送の最大数
NUMBER
2
エッジ制御 Thing との間で許可される同時転送の最大数を定義します。たとえば、この値が 2 の場合、1 つのエッジ制御 Thing が同時に持つことができるアクティブな転送 (アップロードまたはダウンロード) は 2 つだけです。ファイル転送エグレスをデキューするよう求める以降のリクエストは、十分な容量が確保されるまで却下されます。
エッジ制御ファイル転送のアイドルタイムアウト (秒)
NUMBER
600
処理 (データ転送やジョブ状態更新など) が行われずにアクティブなジョブがアクティブな状態を維持できる最大時間を定義します。この範囲は 1-3600 秒です。これは常時オン転送ジョブのアイドルタイムアウトとほぼ同じですが、通常はポーリングデバイスの ping サイクルの分だけ長くなります。
File Transfer Cleanup Frequency (sec)
NUMBER
10
ファイル転送操作を評価するためのクリーンアップタスクの頻度を定義します。
クリーンアップタスクは、アクティブなジョブテーブルから古いジョブや期限切れのジョブを除去します。この操作はファイル転送スロットを解放し、キューに入っているその他の操作に役立ちます。推奨される最小値は 1 秒、最大値は 60 秒です。
この設定の値は慎重に設定する必要があります。ほとんどのユースケースでは、デフォルト値の 10 秒で機能することが見込まれます。
値が非常に小さいと、バックグラウンドタスクがごく頻繁に開始されます。これにより、現在アクティブなすべてのファイル転送ジョブがキャッシュから取得されて有効期限が評価されます。さらに、不要な計算とキャッシュへの負荷が増します。
非常に高い値を指定すると、このタスクが開始される頻度が低くなり、有効な予約が格納されているファイル転送がスタックして、予約がタイムリーに解放されない可能性があります。ネットワークが不安定であったりデバイスが接続していないなど、多くの操作がスタックしている場合、これはファイル転送操作全体に影響を与える可能性があります。
これは役に立ちましたか?