加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

宜人贷蜂巢API网关技能解密之Netty行使实践

发布时间:2019-04-25 16:59:06 所属栏目:教程 来源:蜂巢团队
导读:宜人贷蜂巢团队,由Michael创建于2013年,通过行使互联网科技本领助力金融生态调和康健成长。自创立起一向致力于多维度数据闭环平台建树。今朝团队局限高出百人,涵盖征信、电商、金融、交际、五险一金和保险等用户授信数据的抓取理会营业,辅以先辈的数据

NioEventLoop的担任相关较量伟大,在AbstractScheduledEventExecutor 中,Netty 实现了 NioEventLoop 的 schedule 成果,即我们可以通过挪用一个 NioEventLoop 实例的 schedule 要领来运行一些按时使命。而在 SingleThreadEventLoop 中,又实现了使命行列的成果,通过它,我们可以挪用一个NioEventLoop 实例的 execute 要领来向使命行列中添加一个 task, 并由 NioEventLoop 举办调治执行。

凡是来说,NioEventLoop 负担着两种使命,第一个是作为 IO 线程,执行与 Channel 相干的 IO 操纵,包罗挪用 select 守候停当的 IO 变乱、读写数据与数据的处理赏罚等;而第二个使命是作为使命行列,执行 taskQueue 中的使命,譬喻用户挪用 eventLoop.schedule 提交的按时使命也是这个线程执行的。

详细的结构进程,见下:

建设使命行列tailTasks(内部为有界的LinkedBlockingQueue):

建设线程的使命行列taskQueue(内部为有界的LinkedBlockingQueue),以及使命过多防备体系宕机的拒绝计策rejectedHandler。

个中tailTasks和taskQueue均是使命行列,而优先级差异,taskQueue的优先级高于tailTasks,按时使命的优先级高于taskQueue。

五、ServerBootstrap初始化及启动

相识了Netty线程池NioEvenrLoopGroup的建设进程后,下面看下API网关处事ServerBootstrap的是怎样行使线程池引入处事中,为高并发会见处事的。

API网关ServerBootstrap初始化及启动代码,见下:

  1. serverBootstrap = new ServerBootstrap();  
  2. bossGroup = new NioEventLoopGroup(config.getBossGroupThreads());  
  3. workerGroup = new NioEventLoopGroup(config.getWorkerGroupThreads());   
  4.  
  5. serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)  
  6.         .option(ChannelOption.TCP_NODELAY, config.isTcpNoDelay())  
  7.         .option(ChannelOption.SO_BACKLOG, config.getBacklogSize())  
  8.         .option(ChannelOption.SO_KEEPALIVE, config.isSoKeepAlive())  
  9.         // Memory pooled  
  10.         .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)  
  11.         .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)  
  12.         .childHandler(channelInitializer);    
  13.  
  14. ChannelFuture future = serverBootstrap.bind(config.getPort()).sync();  
  15. log.info("API-gateway started on port: {}", config.getPort());  
  16. future.channel().closeFuture().sync(); 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读