2

私は、さまざまな SOAP Web サービスから情報をフェッチする比較的単純な Java サービスを使用しており、内部で apache cxf 2.5.2 を使用しています。このサービスは 20 個のワーカー スレッドを起動して、1 時間ごとに 1000 ~ 8000 件のリクエストを処理します。各リクエストは、リクエストの性質に応じて 2 ~ 5 回の Web サービス呼び出しを行う可能性があります。

設定

  1. Web サービス接続で接続プールを使用しています
  2. 大量のリクエストに効率的に対処するために、接続タイムアウトは 2 秒に設定されています。
  3. すべての接続は、http プロキシ経由で行われます。
  4. 20 ワーカー スレッド
  5. Grunty 16 CPU ボックス

問題は、ログに「接続タイムアウト」エラーが表示され始めており、それらの数が非常に多いことです。コマンドラインからのcurlには5秒以上かかるため、アプリケーションサービスもマシンのネットワークパフォーマンスに影響を与えているようです同じ Web サービスへの接続を確立します。ただし、サービス アプリケーションを停止すると、curl のパフォーマンスが 5 ミリ秒未満に劇的に向上します

他の人々は CXF を使用してこの状況にどのように対処しましたか? それは機能しましたか、それとも別のライブラリに切り替えましたか? ゼロから始めるとしたら、「小さなペイロードの高頻度」トランザクションをどのように設計しますか?

4

1 に答える 1

2

リクエストが完了するまでに非常に長い時間がかかるという、あなたと同様の問題が発生したことがあります。これはCXF問題ではありません。すべての Web サービスのスタックは、非常に頻繁な要求に対して長時間動作します。

この問題を解決するために、JMS EJBメッセージ駆動型 Bean を実装しました。フローは次のとおりです。ユーザーが Web サービスに要求を送信すると、すべての要求がJMSキューに入れられるため、ユーザーへの応答が非常に速くなり、要求はバックグラウンドで処理されます。その後、ユーザーは自分の操作を確認できました: まだプロセスに送信されているか、処理中か、正常に完了したか、何らかの理由で完了に失敗したか。

頻繁なトランザクション アプリケーションを設計する必要がある場合は、間違いなくそれを使用JMSします。

お役に立てれば。

于 2012-07-20T11:54:18.977 に答える