haddler处理队列 netty_Netty的任务队列的Task的三种使用场景
在Netty中 事务的处理都是放入自定义的Handler中的 如果某些业务比较耗时 最终也会阻塞线程 这时就需要任务队列来异步处理任务了。
1.用户自定义的普通任务
例:
ctx.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());
}
});
haddler处理队列 netty_Netty的任务队列的Task的三种使用场景相关推荐
- haddler处理队列 netty_Netty堆外内存泄漏排查,这一篇全讲清楚了
上篇文章介绍了Netty内存模型原理,由于Netty在使用不当会导致堆外内存泄漏,网上关于这方面的资料比较少,所以写下这篇文章,专门介绍排查Netty堆外内存相关的知识点,诊断工具,以及排查思路提供参 ...
- haddler处理队列 netty_如何实现延迟队列
延迟队列的需求各位应该在日常开发的场景中经常碰到.比如: 用户登录之后5分钟给用户做分类推送: 用户多少天未登录给用户做召回推送: 定期检查用户当前退款账单是否被商家处理等等场景. 一般这种场景和定时 ...
- Redis 消息队列的三种方案(List、Streams、Pub/Sub)
现如今的互联网应用大都是采用 分布式系统架构 设计的,所以 消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段,它具有 低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 当前使用较多 ...
- 详解Yarn中三种资源调度器(FIFO Scheduler、Capacity Scheduler、Fair Scheduler)和配置自定义队列实现任务提交不同队列
前言 在前面 Yarn的基本架构和作业提交全流程 一文中提到,当ResourceManager收到客户端Client的请求之后会将该作业job添加到(默认的)容量调度器中,然后再由某一个空闲的Node ...
- (图解)循环队列的三种判断队空、队满操作(附带源码和插入删除操作等一些基本操作)
目录 一.普通的顺序存储队列 二.循环队列 (1)少用一个元素空间 i.初始化队列操作: iii.入队操作: iv.出队操作: (2)设置flag标志 i.初始化队列操作: ii.判断队空操作: ii ...
- 消息中间件(二)消息队列常见的几种使用场景介绍
一.消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构.是大型分布式系统不可缺少的中间件. 目前在生产环境,使 ...
- 三种方式实现阻塞队列(简单版)
1.基于wait和notify方法实现的阻塞队列 public class WaitNotifyInterview {public final static int QUEUE_SIZE = 10;p ...
- 消息队列的五种使用场景
场景一:异步处理 场景二:应用解耦 场景三:流量削峰 场景四:日志处理 场景五:消息通讯 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩 ...
- 迷宫问题的三种求解方法(递归求解、回溯求解和队列求解)
目录 一.迷宫问题的三种求解方法 递归求解 回溯求解 队列求解 二.华为迷宫问题 一.迷宫问题的三种求解方法 在迷宫问题中,给定入口和出口,要求找到路径.本文将讨论三种求解方法,递归求解.回溯求解和队 ...
最新文章
- Python中的find()
- 近世代数--群--怎么判断是不是群?
- error: 'syms' undefined near line 1 column 1
- Spark入门(十七)之单表关联
- 如何配置Apache虚拟主机?(基于IP、基于端口、基于域名)
- 安装python进度条不动了_TensorFlow(一):使用Anconda安装TensorFlow
- 【数据库系统设计】关系数据库标准语言SQL(3)
- [转载] Java中的abstract关键字
- 在lua的string库和正则表达式
- TabContainer样式设置(2)
- 2022年python大数据开发学习路线
- 编写一个班级管理程序java_java课程设计(班级管理系统)
- jquery消息插件 toastr 消息提示插件 弹框提示
- 从零配置腾讯云cdn加速服务!
- 计算机网络 华东理工大学 2020期末考试
- linux系统安装文网卫士,360主机卫士 linux版的安装/使用/卸载 方法
- Router的路由表
- 最新版PS CC 2017版下载,可汉化可激活
- 简单典型二阶系统_威海召开迎接全国医疗保障系统行风建设专项评价工作会议...
- JavaScript代理模式之四大代理
热门文章
- 大数据分块_空间数据库基础理论 GIS空间数据处理分析涉及的基本概念
- 让你的原创设计作品展示给世界|设计师的舞台
- 原创设计师如何提高影响力?到集设,让你的原创设计作品展示给世界
- UI设计学习软件下载的好去处
- 分块 数据不相同_ArcGIS四分法分幅栅格数据(超强版)
- beast php,windows php-beast 安装
- vps没有mysql怎么用商店_如何在本地搞一个小程序的服务器之我没有vps我也很绝望呀...
- 为什么以太网中需要 最小帧
- PyQt学习--HelloWorld
- 《代码大全》程序员们怎样花费自己的时间