netty 3.5.1 を使用して、1K を超えるクライアントが接続されたクライアント サーバー アプリケーションを管理する必要があります。サーバーを再起動してクライアントを切断すると、データベースに書き込まれた更新が失われることがあります。再起動/シャットダウンを実行するとき、次のように Netty コンポーネントをシャットダウンします。
- サーバーチャネルのシャットダウン
- すべてのクライアントを切断します (ChannelGroupFuture 経由)
- ChannelPipeline で releaseExternalResources() を呼び出します
- ChannelPipeline の一部である ExecutionHandler で releaseExternalResources() を呼び出します (手動で呼び出す必要がありますか?)
しかし、なぜ ExecutorUtil. terminate (ExecutionHandler によって呼び出される) は、渡された ExecutorService に対して shutdownNow を実行します。shutdownNowは、キュー内の既存のすべてのタスクを排出してそれらを返すためです。ExecutorUtil のため、タスクは実行されません。terminateはvoid型です。ExecutorService でシャットダウンを呼び出して、完了を待つ方が適切ではないでしょうか?