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

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

发布时间:2019-04-27 15:22:34 所属栏目:教程 来源:蜂巢团队
导读:宜人贷蜂巢团队,由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(); 

(编辑:威海站长网)

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

热点阅读