六、Netty核心技术之TaskQueue自定义任务

本文介绍了Netty中TaskQueue的使用场景及其实现方式,包括解决长时间阻塞问题的方法,自定义定时任务,以及非当前Reactor线程调用Channel的各种方法。

一、TaskQueue 任务队列

Netty主要基于主从Reactor多线程模型(如图)做了一定的改进,其中主从Reactor多线程模型有多个Reactor
在这里插入图片描述

1.1 为什么需要TaskQueue?

在这里插入图片描述
在PipeLine中会进行业务处理,当处理比较复杂的业务时需要大量的时间,这时候就会造成长时间的阻塞,所以需要将这些复杂的业务加入到taskQueue中进行异步处理,而不会影响到其他任务的正常进行,即不会造成长时间的阻塞

1.2 任务队列中的Task有三种典型使用场景

  • 用户程序自定义的普通任务
  • 用户自定义定时任务
  • 非当前Reactor线程调用Channel的各种方法

例如: 在推送系统的业务流程里面,根据用户的标识,找到对应的Channel引用,然后调用Write类方法向该用户推送消息,就会进入到这种场景。最终的Write会提交到任务队列中后被异步消费

1.3 常规阻塞式实例代码演示

1.3.1 服务端NettyServer代码实现

package com.netty.taskQueue;


import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;


import java.net.ServerSocket;

public class NettyServer {
   
   
    public static void main(String[] args) throws InterruptedException {
   
   
        //创建线程池对象
        NioEventLoopGroup bossGroup = new NioEventLoopGroup();
        NioEventLoopGroup workGroup = new NioEventLoopGroup();
        //创建配置启动类
        ServerBootstrap serverBootstrap = new ServerBootstrap();
       try {
   
   
           //添加相关配置
           serverBootstrap.group(bossGroup, workGroup)//添加线程池组
                   .channel(NioServerSocketChannel.class)//
                   .option(ChannelOption.SO_BACKLOG, 128)//
                   .childOption(ChannelOption.SO_KEEPALIVE, true)//
                   .childHandler(new ChannelInitializer<SocketChannel>() {
   
   
                       @Override
                       protected void initChannel(SocketChannel c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿小许

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值