0

ejb3Beanがデプロイされた JBoss 5 があります。

Bean メソッドの実行に非常に長い時間がかかる場合 (私は 2 時間確認しました)、クライアントは EJB メソッドの実行が終了したときに (例外の有無にかかわらず) 応答を受け取りません。

クライアントは、ソケットからの応答を待ってブロックされています。

なぜそれが起こるのですか?

4

1 に答える 1

2

ほとんどの場合、これは (ステートフル) ルーター、パケット フィルター、ロード バランサー、SSL ボックスが原因で発生します。一定時間非アクティブになった後に接続を終了するだけで、実際のエンドポイントには通知されません。経験上、通常、デバイスに適切なタイムアウトを設定することは制御不能です。

とにかく、症状を治す代わりに、実行中のリクエストには開いているTCP接続が必要であり、スレッドをブロックする可能性があります。したがって、システムの設計を同期から非同期に変更することを検討してください。

  • ここでポーリングを使用してください。毎分で十分です。したがって、タスクを送信する関数と、「まだ準備ができていません」または「ここに結果があります」を返す別の関数があります。
  • クライアントでJMS キューを使用してタスクを送信し、結果を受け取る
于 2013-09-09T08:12:14.237 に答える