netty5与spring集成,实现配置启动--(一)
来源:互联网 发布:用友u8数据备份 编辑:程序博客网 时间:2024/05/17 08:24
1.使用netty实现可配置化的NIO通讯服务器
2.要求支持多种通讯协议以及长短链接,如http,https,TCP,TLS,MQTT等
3.支持私有协议拓展开发
以上因为是个人demo项目,所以未做其他方面的需求,比如压力测试,集群部署等,这些自己也需要在下下个阶段继续研究(下个阶段主要研究dubbo和完善自己的demo项目)。
1.Main类
首先我们少不了一个Main类,这个是netty启动的类,直接看代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
来自CODE的代码片com.omen.netty.server.Main.java
这里在启动main方法的时候会首先去加载spring配置文件,同时保存context。期间应用了一个systemInfo对象为该系统的系统配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277
来自CODE的代码片com.omen.netty.server.sysPojo.SystemInfo.java
systemInfo里面涵盖了多个构造函数,这个在后面会有解释(想通过spring直接配置系统参数),目前有个更好的想法就是通过配置map去完成配置系统参数,但是目前还没改好,改好以后会更新代码。
IServer为server接口
1 2 3 4 5 6 7 8 9 10 11
来自CODE的代码片com.omen.netty.server.IServer.java
我们的实现类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
来自CODE的代码片com.omen.netty.server.BasicServer.java
在我们的实现类中,start方法和stop方法最终都会调用systemInfo的shutDownGracefully以便释放资源。其中start当中会等待服务端链路关闭以后main函数才退出。
2.几个工厂
先看代码
channel工厂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
来自CODE的代码片com.omen.netty.server.factory.ServerChannelFactory.java
ServerBootStrap工厂
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
来自CODE的代码片com.omen.netty.server.factory.ServerBootstrapFactory.java
以上是两个关键类
在ServerBootstrapFactory中
我们创建了两个NioEventLoopGroup实例。NioEventLoopGroup是一个多线程的I/O操作事件循环池,Netty为各种传输方式提供了多种EventLoopGroup的实现。NioEventLoopGroup专门用于网络事件的处理,实际上它们就是Reactor线程组。这里创建两个的原因是一个用于服务端接受客服端的链接,另一个用于进行SocketChannel的网络读写。
我们还在ServerBootstrapFactory中创建了ServerBootstrap对象,它是netty用于启动NIO服务端的辅助启动类,目的是降低服务端的开发复杂度。
传送门,讲解ServerBootstrap工作原理
http://blog.csdn.net/zxhoo/article/details/17532857
接下来我们调用了ServerBootstrap的group方法,将两个NIO线程组当作入参传递到ServerBootstrap,借着设置创建的channel类型为NioServerSocketChannel,他的功能是监听网络事件类型并创建channel。
在ServerChannelFactory中
我们对ServerBootstrap绑定了I/O事件的处理类,它的作用类似于Reactor当中的handler,主要用于处理网络是I/O事件,例如记录日志、对消息进行编解码等。
ServerBootstrap配置完成以后,调用它的bind方法绑定监听端口,随后,调用它的同步阻塞方法sync等待绑定完成。完成之后netty会返回一个channelFuture,它的功能类主要用于异步操作的通知回调。
- netty5与spring集成,实现配置启动--(一)
- netty5与spring集成,实现配置启动--(一)
- Spring与Quartz集成配置实现简单定时任务调度
- Spring与Quartz集成配置实现简单定时任务调度
- DWR 与 SPRING 集成配置
- Mongodb与spring集成 配置
- activiti与spring集成配置
- activemq与spring集成配置
- ActiveQM与spring集成配置
- Spring 集成 Memcached 配置(一)
- Spring 集成 ActiveMQ 配置(一)
- spring与struts1集成方案(一)
- Struts与Spring集成方式(一)
- MyBatis08--Mybatis 与 Spring集成(方法一)
- Spring Boot集成Redis java实现配置
- Spring Boot集成Redis实现自动配置
- jBPM-4.4:与Spring集成配置
- Mongodb与spring集成(1)------配置
- hadoop艰难安装配置之旅
- 23种设计模式-Builder建造者模式
- http 报文格式
- 剑指offer--反转链表
- android:蓝牙4.0的搜索、连接及数据传输(真实可用)——(一)
- netty5与spring集成,实现配置启动--(一)
- 一个屌丝程序猿的人生(六十九)
- 二元查找树
- [JZOJ5165] 小W的动漫
- 湖南省第八届大学生计算机程序设计竞赛CSU--最短的名字
- TCP网络通信/线程池
- 【转载】SAP ABAP中自定义权限对象(AUTHORITY-CHECK)
- 自适应阈值的ransac平面拟合
- 外网远程桌面连接内网服务器教程(超详细)