ThrowableUtil】的更多相关文章

public class ThrowableUtil { public static Throwable getDeepestCause(final Throwable throwable) { int count; Throwable cause; for (count = 5, cause = throwable; cause.getCause() != null && count > 0; cause = cause.getCause(), --count) {} return…
netty作为异步通信底层框架,其优异的性能让我产生了研究他的源码的决定. 代码研究之前,第一步就是要准备环境,至少可以编译通过,下面,就拿github上的4.1分支进行.我的IDE是Intellij IDEA 2016 community版本, 操作系统是Windows 7. 一开始,就踩雷了,起初,我的源码是在Github上,通过zip的方式获取4.0分支的代码,编译的时候,总是报错.各种line endings的错误,日志如下: -Dclassworlds.conf=E:\Software…
负载是一个很大的话题,也是一个非常重要的话题.不管是在大的互联网软件中,还是在一般的小型软件,都对负载有一定的要求,负载过高会导致服务器压力过大:负载过低又比较浪费服务器资源,而且当高请求的时候还可能出现低效率的问题.多线程就是一种提高服务效率的方式.面对海量的用户请求,单线程肯定扛不住,那么多线程的需求也就应运而生,所以说掌握多线程的开发技术对于技术人员来说肯定是非常重要的.参考文档http://docs.oracle.com/javase/7/docs/api/. 一.Runnable使用…
概述 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. 系统架构图 启动过程 我们首先通过netty官方的demo来分析一下,TelnetServer. public final class TelnetServer { static final…
1 调度中心API服务 1.任务结果回调服务: 2.执行器注册服务: 3.执行器注册摘除服务: 4.触发任务单次执行服务,支持任务根据业务事件触发: API暴露代码:com.xxl.job.admin.controller.JobApiController.java API服务位置:com.xxl.job.core.biz.AdminBiz.java 通过请求参数匹配对应方法反射执行后把结果返回给客户端,见代码com.xxl.rpc.remoting.provider.XxlRpcProvide…
在Netty使用ChannelFuture和ChannelPromise进行异步操作的处理 这是官方给出的ChannelFutur描述 * | Completed successfully | * +---------------------------+ * +----> isDone() = true | * +--------------------------+ | | isSuccess() = true | * | Uncompleted | | +=================…
前提 最近一直在看Netty相关的内容,也在编写一个轻量级的RPC框架来练手,途中发现了Netty的源码有很多亮点,某些实现甚至可以用苛刻来形容.另外,Netty提供的工具类也是相当优秀,可以开箱即用.这里分析一下个人比较喜欢的领域,并发方面的一个Netty工具模块 - Promise. 环境版本: Netty:4.1.44.Final JDK1.8 Promise简介 Promise,中文翻译为承诺或者许诺,含义是人与人之间,一个人对另一个人所说的具有一定憧憬的话,一般是可以实现的. io.n…
透过源码看xxl-job (注:本文基于xxl-job最新版v2.0.2, quartz版本为 v2.3.1. 以下提到的调度中心均指xxl-job-admin项目) 上回说到,xxl-job是一个中心化的设计方案,分为了调度中心和 执行器两部分.其本质上仍然是对quartz的封装.那么,我们就分别通过“调度中心” 和 “执行器” 来看看它是怎么运作的. 调度中心 初始化 由于是spring boot应用,因此先从配置看起. XxlJobDynamicSchedulerConfig 相关的初始化…
Netty 中大量 I/O 操作都是异步执行,本篇博文来聊聊 Netty 中的异步编程. Java Future 提供的异步模型 JDK 5 引入了 Future 模式.Future 接口是 Java 多线程 Future 模式的实现,在 java.util.concurrent包中,可以来进行异步计算. 对于异步编程,我们想要的实现是:提交一个任务,在任务执行期间提交者可以做别的事情,这个任务是在异步执行的,当任务执行完毕通知提交者任务完成获取结果. 那么在 Future 中是怎么实现的呢?我…
ChannelHandler中异常的获取与处理是通过继承重写exceptionCaught方法来实现的,本篇文章我们对ChannelPipeline中exceptionCaught异常事件的传播进行梳理分析 1.出站事件的传播示例 首先我们继续在之前的代码上进行改造,模拟异常事件的传播 public class ServerApp { public static void main(String[] args) { EventLoopGroup boss = new NioEventLoopGr…
我们在Netty学习系列五的最后提出了一些问题还没得到回答,今天来通过学习NioServerSocketChannel的源码来帮我们找到之前问题的答案. 先看一下NioServerSocketChannel的继承结构. AttributeMap接口及DefaultAttributeMap主要是提供了体检属性和获取属性的能力,便于我们为Channel绑定额外的属性. AbstractChannel实现了Channel接口,实现了Channel通用的行为和方法,我们在Netty学习系列四中已经介绍过…
首先我们通过一张继承关系的图来认识下AbstractChannel在Netty中的位置. 除了Comaprable接口来自java自带的包,其他都是Netty包中提供的. Comparable接口定义了Channel是可以比较的. AttributeMap接口为Channel提供了绑定其他属性的能力. 这两个接口我们先不去深入了解,主要看ChannelOutboundInvoker. ChannelOutboundInvoker接口主要提供了与网络链路相关的一些操作以及读写相关的操作,并统一返回…
目录 改造原因 主要改造思路 调度中心 调度中心 执行器侧 总结 修改后的源码仓库地址:GitHub. : 改造原因 原有的xxl-job使用自己实现的http协议进行注册以及调度等,与目前框架中本身的注册中心格格不入,会影响健康检查.日志处理.问题排查. 技术栈统一.避免执行器内包含两套注册逻辑. 提高分布式健壮性,原有的服务注册以及发现等功能较弱,且与实际应用可用与否完全无关,经常存在xxl-job线程出问题,但主服务正常,或主服务出问题,但xxl-job线程正常. 灰度扩展,目前系统灰度使…
netty作为一种高性能的网络编程框架,在很多开源项目中大放异彩,十分亮眼,但是在有些项目中却被滥用,导致使用者使用起来非常的难受. 本篇文章将会讲解xxl-job作为一款分布式任务调度系统是如何滥用netty的,导致了怎样的后果以及如何修改源码解决这些问题. 笔者使用的是2.3.0版本的xxl-job,也是当前的最新版本:下面所有的代码修改全部基于2.3.0版本的xxl-job源代码 https://github.com/xuxueli/xxl-job/tree/2.3.0 其中,xxl-jo…
1.源码入口 xxl-job-admin是一个简单的springboot工程,简单翻看源码,可以很快发现XxlJobAdminConfig入口. @Override public void afterPropertiesSet() throws Exception { adminConfig = this; xxlJobScheduler = new XxlJobScheduler(); xxlJobScheduler.init(); } 我们就可以顺着这个XxlJobScheduler,分析下…
欢迎关注公众号:bin的技术小屋,本文图片加载不出来的话可查看公众号原文 本系列Netty源码解析文章基于 4.1.56.Final版本 1. 前文回顾 在前边的系列文章中,笔者为大家详细剖析了 Reactor 模型在 netty 中的创建,启动,运行,接收连接,接收数据,发送数据的完整流程,在详细剖析整个 Reactor 模型如何在 netty 中实现的过程里,我们或多或少的见到了 pipeline 的身影. 比如在 Reactor 启动的过程中首先需要创建 NioServerSocketCh…