在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的三种使用场景相关推荐

  1. haddler处理队列 netty_Netty堆外内存泄漏排查,这一篇全讲清楚了

    上篇文章介绍了Netty内存模型原理,由于Netty在使用不当会导致堆外内存泄漏,网上关于这方面的资料比较少,所以写下这篇文章,专门介绍排查Netty堆外内存相关的知识点,诊断工具,以及排查思路提供参 ...

  2. haddler处理队列 netty_如何实现延迟队列

    延迟队列的需求各位应该在日常开发的场景中经常碰到.比如: 用户登录之后5分钟给用户做分类推送: 用户多少天未登录给用户做召回推送: 定期检查用户当前退款账单是否被商家处理等等场景. 一般这种场景和定时 ...

  3. Redis 消息队列的三种方案(List、Streams、Pub/Sub)

    现如今的互联网应用大都是采用 分布式系统架构 设计的,所以 消息队列 已经逐渐成为企业应用系统 内部通信 的核心手段,它具有 低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 当前使用较多 ...

  4. 详解Yarn中三种资源调度器(FIFO Scheduler、Capacity Scheduler、Fair Scheduler)和配置自定义队列实现任务提交不同队列

    前言 在前面 Yarn的基本架构和作业提交全流程 一文中提到,当ResourceManager收到客户端Client的请求之后会将该作业job添加到(默认的)容量调度器中,然后再由某一个空闲的Node ...

  5. (图解)循环队列的三种判断队空、队满操作(附带源码和插入删除操作等一些基本操作)

    目录 一.普通的顺序存储队列 二.循环队列 (1)少用一个元素空间 i.初始化队列操作: iii.入队操作: iv.出队操作: (2)设置flag标志 i.初始化队列操作: ii.判断队空操作: ii ...

  6. 消息中间件(二)消息队列常见的几种使用场景介绍

    一.消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸缩和最终一致性架构.是大型分布式系统不可缺少的中间件. 目前在生产环境,使 ...

  7. 三种方式实现阻塞队列(简单版)

    1.基于wait和notify方法实现的阻塞队列 public class WaitNotifyInterview {public final static int QUEUE_SIZE = 10;p ...

  8. 消息队列的五种使用场景

    场景一:异步处理 场景二:应用解耦 场景三:流量削峰 场景四:日志处理 场景五:消息通讯 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩 ...

  9. 迷宫问题的三种求解方法(递归求解、回溯求解和队列求解)

    目录 一.迷宫问题的三种求解方法 递归求解 回溯求解 队列求解 二.华为迷宫问题 一.迷宫问题的三种求解方法 在迷宫问题中,给定入口和出口,要求找到路径.本文将讨论三种求解方法,递归求解.回溯求解和队 ...

最新文章

  1. Python中的find()
  2. 近世代数--群--怎么判断是不是群?
  3. error: 'syms' undefined near line 1 column 1
  4. Spark入门(十七)之单表关联
  5. 如何配置Apache虚拟主机?(基于IP、基于端口、基于域名)
  6. 安装python进度条不动了_TensorFlow(一):使用Anconda安装TensorFlow
  7. 【数据库系统设计】关系数据库标准语言SQL(3)
  8. [转载] Java中的abstract关键字
  9. 在lua的string库和正则表达式
  10. TabContainer样式设置(2)
  11. 2022年python大数据开发学习路线
  12. 编写一个班级管理程序java_java课程设计(班级管理系统)
  13. jquery消息插件 toastr 消息提示插件 弹框提示
  14. 从零配置腾讯云cdn加速服务!
  15. 计算机网络 华东理工大学 2020期末考试
  16. linux系统安装文网卫士,360主机卫士 linux版的安装/使用/卸载 方法
  17. Router的路由表
  18. 最新版PS CC 2017版下载,可汉化可激活
  19. 简单典型二阶系统_威海召开迎接全国医疗保障系统行风建设专项评价工作会议...
  20. JavaScript代理模式之四大代理

热门文章

  1. 大数据分块_空间数据库基础理论 GIS空间数据处理分析涉及的基本概念
  2. 让你的原创设计作品展示给世界|设计师的舞台
  3. 原创设计师如何提高影响力?到集设,让你的原创设计作品展示给世界
  4. UI设计学习软件下载的好去处
  5. 分块 数据不相同_ArcGIS四分法分幅栅格数据(超强版)
  6. beast php,windows php-beast 安装
  7. vps没有mysql怎么用商店_如何在本地搞一个小程序的服务器之我没有vps我也很绝望呀...
  8. 为什么以太网中需要 最小帧
  9. PyQt学习--HelloWorld
  10. 《代码大全》程序员们怎样花费自己的时间