Netty的任务队列的Task的三种使用场景
2021-01-18 14:11
标签:自定义 out ast cut throw trace keepaliv 比较 keep 在Netty中 事务的处理都是放入自定义的Handler中的 如果某些业务比较耗时 最终也会阻塞线程 这时就需要任务队列来异步处理任务了。 1.用户自定义的普通任务 例: Netty的任务队列的Task的三种使用场景 标签:自定义 out ast cut throw trace keepaliv 比较 keep 原文地址:https://www.cnblogs.com/mc-74120/p/13343055.htmlctx.channel().eventLoop().execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(100 * 10);
ctx.writeAndFlush(Unpooled.copiedBuffer("执行", CharsetUtil.UTF_8));
} catch (Exception e) {
e.printStackTrace();
}
}
});
2.用户自定义定时任务
例://解决阻塞问题2 用户自定义定时任务 任务提交到scheduleTaskQueue
ctx.channel().eventLoop().schedule(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(100 * 10);
ctx.writeAndFlush(Unpooled.copiedBuffer("执行200", CharsetUtil.UTF_8));
} catch (Exception e) {
e.printStackTrace();
}
}
}, 5, TimeUnit.SECONDS);
3.非当前Recator线程调用channel的各种方法ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(boosGroup,workerGruop)//设置两个线程组
.channel(NioServerSocketChannel.class)//设置通道类型
.option(ChannelOption.SO_BACKLOG,128)//设置线程队列的连接个数
.childOption(ChannelOption.SO_KEEPALIVE,true)//设置保持活动状态
.childHandler(new ChannelInitializer
//创建一个通道测试对象(匿名对象)
//给pipeline设置处理器
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
System.out.println("客户SocketChannel的hashcode:"+socketChannel.hashCode());
//可以使用一个集合管理SocketChannel 再推送消息时,可以将业务加入到各个channel中 对应的NIOEventLoop的taskQueue
//或者scheduleTaskQueue
socketChannel.pipeline().addLast(new NettyServerHandler());
}
});
下一篇:http https
文章标题:Netty的任务队列的Task的三种使用场景
文章链接:http://soscw.com/index.php/essay/43693.html