私のキャリアの中で何度か遭遇した問題は、階層化されたサービス アーキテクチャで、すべてのスレッドがデッドロックまたはある種の無限ループで消費される状態になると、単一のダウンストリーム システムがクライアント アプリケーション全体をダウンさせる可能性があることです。そのシステムのバグ。このような状況下でも、Java EE サーバーのサーバー ソケットは、クライアント アプリケーションからの要求を受け入れてキューに入れています。これにより、クライアント アプリケーションは、適切に確立されたソケット接続からの応答を待っているすべてのスレッドを使い果たします。その後、すべてのユーザーの要求もキューに入れられるため、システムからロックアウトされます。
私はいくつかの解決策を考えましたが、コミュニティにもっと良い解決策があるかどうか疑問に思っていました.
ダウンストリーム リクエスト用に分離されたスレッド プール。これが問題になるのは、システム内のアイドル スレッドの数を増やして、完全なスループットを確保するのに十分なスレッドが必要な小さなプールを多数作成するためです。スレッドを生成するということは、トランザクション コンテキストとセキュリティ コンテキストを自分で処理する必要があることを意味します。サポートされている Java EE ソリューションではありません。
Java EE の推奨される非同期ソリューションである MDB ソリューションは、かなり重いように見えますが、アプリ サーバーが MDB スレッド プールの管理を処理できるという追加の利点があります。(現在、私のリストの第 1 位)
ESB。これはさらに負荷が高く、ネットワークと処理時間が長くなります。ただし、個々のサービスのタイムアウトを設定できます。また、大企業に実装するには永遠にかかるという問題があるため、おそらく私の時間枠では実用的ではありません.
皆さん、もっと良いアイデアはありますか?