実稼働環境には 4 つの Biztalk サーバーがあります。sendport は、受信メッセージを 1 つのテキスト ファイルに書き込むように構成されています。このポートは、1 日に数千のメッセージを受信します。そのため、複数のホスト インスタンスが一度にファイルに書き込もうとすると、1 つのインスタンスが完全なレコードの書き込みを完了する前に、別のインスタンスが新しいレコードの書き込みを開始し、データがファイル全体に散らばってしまいます。
この問題を解決するにはどうすればよいですか?
...1 つのインスタンスが完全なレコードの書き込みを完了する前に、別のインスタンスが新しいレコードの書き込みを開始し、データがファイル全体に散らばっています。
この問題を解決するにはどうすればよいですか?
簡単な方法は、1 つのホスト インスタンスのみを使用してファイルにデータを書き込むことですが、スロットリングの問題が発生する可能性があります。または、ファイル アダプタの [書き込み時にキャッシュを許可する] オプションを使用して調べることもできます。これにより、いくつかの改善が得られる場合があります。
しかし、あなたのアプローチは間違っていると思います。4つの別々の完全に切断されたプロセス(4つのサーバー間で)が確実に単一のファイルに追加されるとは期待できません-順番に。
したがって、このソリューションの再構築を検討する必要があると思います。
同時に行われるポーリング-書き込み-更新プロセスが 1 つだけになるように、この部分のシングルトン オーケストレーションを検討することをお勧めします。
ファイルの代わりにデータベース システムに移動できます。それは非常に単純な解決策であり、非常に効率的でもあります。そのようにしたくない場合は、アプリケーション内にファイル ロックまたはセマフォを実装して、新しいスレッドが他のスレッドが書き込みを完了するまで待機するようにする必要があります。