従来のデモレベルネッティーサーバー側のコードは次のように書かれています:
試し{ // 援助を開始するオブジェクトネッティーサーバーを作成および初期化ServerBootstrap ServerBootstrap ServerBootstrap = RpcServer。この.initServerBootstrap(bossGroup、workerGroup); //は、対応するIPアドレスとポート、成功のための同期待ちバインド ChannelFutureフューチャー= serverBootstrap.bind(ポート)。同期(); logger.info( "RPCサーバーが開始され、ポート:{}" 、ポート); // サーバのリスニングポートが閉じて待つ ... future.channel()closeFuture()同期(); } キャッチ(InterruptedExceptionある私は、 ){ LOGGER.error( "RPCサーバー異常、ポート:{}、原因がある:" 、ポート、i.getMessage())。 }最後に{ // エレガント出口は、NIOスレッドグループ解放 workerGroup.shutdownGracefullyを(); bossGroup.shutdownGracefully(); }
でfuture.channel()closeFuture()同期(); ..この文の主な目的は、このような単純なJUnitテスト法などの非springbootにデモを、書きやすい、テストが容易で、closeFuture()同期()。シャットダウンして手動でサーバーをシャットダウンする必要はありませんテスト実行時間を停止してからメソッドworkerGroup.shutdownGracefully()を呼び出しますJUnitテストサーバーを防ぐことができます.... テスト設計時の心のような平和。
nettyserverリンクが@Componentを設定nettyserver例えばspringbootアプリケーションを起動するときspringbootがnettyserverを走査したときただし、コメントをnettyserverメインスレッドの実行方法postconstructをspringboot、その後起こっ
。future.channel()closeFuture()同期 ();.
これはspringbootメインスレッドの結果はブロックされ、豆の残りの部分をロードし続けることができない
springbootも追加した場合依存springbootウェブ悪化(Tomcatの容器に付属しています) 、それがブロックされたとTomcatサーブレットエンジンwebapplicationcontextを開始することができません。
...そしてworkerGroup.shutdownGracefully();単にnettyserver / initのプロセスの書き込みfuture.channel()closeFuture()シンク()の方法で構築することができません。
単に非同期であり、メインスレッドspringbootをブロックしないコンストラクタ/ initメソッドbootstrap.bind(ポート)です。
停止方法と別々に抽出しました。
直接springbootオフアプリケーションは、手動で結合ポートの前にリリースされる予定nettyserver上記の方法は、安全のためにを呼び出して停止していないにもかかわらず、なお、あなたが追加できる注釈は、メソッド@PreDestroyを停止します