0

私のアプリケーション環境は Tomcat 7.0、JDK 1.7 です。REST API に Jersey を使用しています。投稿タイプの REST API リクエストの 1 つは、処理に 3 分以上かかりますが、これはおおよその時間であり、3 分以上になることもあります。次に、リクエストの処理が完了したら、クライアントにレスポンスを返します。しかし、ここではリクエストの処理に3分かかるため、クライアント側でリクエストのタイムアウトが発生し、サーバーからの応答が得られません。

サーバーでのリクエスト処理は次のようになります。

リクエストを開始する

  1. 詳細を db テーブルに挿入します [このプロセスには数秒かかります]
  2. ファイルをリモート コンピューター サーバーにコピーしています [このプロセスには 3 分かかります]
  3. ファイルを更新/アクティブ化します [このプロセスには数秒かかります]
  4. クライアントに応答を送信する

リクエスト処理を終了する

上記のプロセスはすべてトランザクション内にある必要があるため、上記のプロセスのいずれかを削除することはできません。

プロセスのステップ 2 で最高のパフォーマンスを既に改善しており、1 GB を超えるサイズのファイルをリクエストした場合にのみ発生します。

現在、一時的な解決策として、Apache サーバーで構成されているタイムアウト値を増やしました。

今、私は次のアプローチのいずれかで、私の問題の解決策を探しています:

  1. 私の問題を解決できる開発または実装戦略を提案してください。
  2. リクエストのタイムアウトの問題に取り組むにはどうすればよいですか?
  3. 応答が完了したときに、サーバー側からクライアントに通知するソリューションをお探しですか?
  4. Jersey REST API実装でクライアントとサーバー間の接続を閉じることができないソリューションをお探しですか?

よろしくお願いします ヤティン・バライヤ

4

1 に答える 1

1

私は次のアプローチで私の問題を解決しようと考えています。

問題を解決するためのプロセスの実装手順

1.最初にサーバーにリクエストを送信 ==========> サーバーはすぐにクライアントに応答を送信し、ID を生成して、同じプロセス内の別のスレッドによって実行時間の長いプロセスを開始します。

2.クライアント側で最初に最初のリクエスト応答を受信し、数秒待ってから、長時間実行されているプロセスのステータスをチェックするためにサーバーに他のリクエストを再度送信します====>サーバーは2番目のリクエストとクライアントへの応答を取得します送信中または完了の長期応答ステータスのステータス

3.クライアントが応答を受け取った場合:進行中

4.その後、クライアントは数秒間待機し、ステータスチェックのリクエストを再度送信します ===> サーバー 完了への応答の送信

5.クライアントが応答を受け取った場合:完了

  1. 次に、そのキューから他のリクエストを取得し始めます。[クライアントが完了ステータスと生成された ID を取得した場合にのみ、次のリクエストのプロセスを開始します]

ここでは、複数のリクエストをサーバーに送信してクライアント側からトランザクションを管理し、プロセスが正常に完了したかどうかを確認してから、次のアクションの処理を開始することを意味します。

上記のアプローチで、トランザクション プロセスが得られました。上記の問題を解決するための私のアプローチを教えてください。それで十分ですか、それともこのソリューションに変更が必要ですか?

于 2013-09-19T10:27:54.543 に答える