![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dubbo
文章平均质量分 91
飞向札幌的班机
十五年+程序员,喜欢搞开源,欢迎一起交流学习
展开
-
Dubbo源码解析第一期:如何使用Netty4构建RPC
早期学习和使用Dubbo的时候(那时候Dubbo还没成为Apache顶级项目),写过一些源码解读,但随着Dubbo发生了翻天覆地的变化,那些文章早已过时,所以现在计划针对最新的Apache Dubbo源码来进行“阅读理解”,希望和大家一起再探Dubbo的实现。原创 2024-01-20 10:08:05 · 1455 阅读 · 1 评论 -
Dubbo源代码分析八:再说Provider线程池被EXHAUSTED
在上回《Dubbo源代码实现六》中我们已经了解到,对于Dubbo集群中的Provider角色,有IO线程池(默认无界)和业务处理线程池(默认200)两个线程池,所以当业务的并发比较高,或者某些业务处理变慢,业务线程池就很容易被“打满”,抛出“RejectedExecutionException: Thread poolis EXHAUSTED! ”异常。当然,前提是我们没给Pro...原创 2017-08-26 13:24:46 · 5457 阅读 · 1 评论 -
Dubbo源代码分析九:优雅停机
虽然我们系统的用户体验和数据一致性不应该完全靠优雅停机来保证,但作为一流的RPC框架,优雅停机的功能必不可少,Dubbo用户手册有对优雅停机做一个简单的叙述: Dubbo是通过JDK的 ShutdownHook 来完成优雅停机的,所以如果用户使用 kill -9 PID 等强制关闭指令,是不会执行优雅停机的,只有通过 kill PID 时,才会执行。服务提供方:停止时,先标记为不接收新原创 2017-12-08 22:55:03 · 4190 阅读 · 3 评论 -
Dubbo源代码分析七:使用executes属性的一个问题
我们知道,在Dubbo中可以给Provider配置线程池大小来控制系统提供服务的最大并行度,默认是200个,如果我们想配置成500,可以如下配置: dubbo:providertoken="true"threads="500"/> 当我们想限制某个dubbo服务使用的最大线程数量时,dubbo提供了executes这一属性来提供这个功能,比如我们想限制某个接口最大能同时使用原创 2017-07-22 12:28:39 · 8059 阅读 · 1 评论 -
Dubbo源代码实现六:线程池模型与提供者
对于Dubbo的服务提供者,主要有两种线程池,一种是IO处理线程池,另一种是服务调用线程池。而作为IO处理线程池,由于Dubbo基于Mina、Grizzly和Netty框架做IO组件,IO线程池都是基于这些框架来配置,比如Netty中的boss和worker线程池,Dubbo选择的是“无边界”的CachedThreadPool,这意味着对所有服务请求先做到“来者不拒”,本文拿Netty组件举例,代原创 2017-06-18 18:46:26 · 10000 阅读 · 3 评论 -
Dubbo源代码实现五:RPC中的服务消费方实现
刚开始使用Dubbo的人,可能对Dubbo的第一印象就是它是一个RPC框架,当然,所有的分布式框架都少不了相互通信的过程,何况Dubbo的任务就是帮助分布式业务系统完成服务的通讯、负载、注册、发现和监控等功能。不得不承认,RPC是Dubbo提供服务的核心流程,为了兼容多种使用场景,Dubbo显然需要提供多种RPC方式(协议). 开发一个简单的RPC框架,重点需要考虑的...原创 2017-01-31 12:57:42 · 5891 阅读 · 5 评论 -
Dubbo源代码实现四:Dubbo中的扩展点与SPI
SPI的全称是ServiceProviderInterface,即服务提供商接口。直白的说,它主要用来实现一个可扩展的Java应用。有人会觉得这就是建立在面向接口编程下的一种为了使组件可扩展或动态变更实现的规范,常见的类SPI的设计有JDBC、JNDI和JAXP等。例如JDBC的架构是由一套API组成,用于给Java应用提供访问不同数据库的能力,而数据库提供商的驱动软件各不相同,JDBC通过提供一原创 2016-11-17 23:00:54 · 4527 阅读 · 4 评论 -
Dubbo源代码实现二:服务调用的动态代理和负载均衡
疑惑一:为什么在Spring中我们能像注入普通本地服务JavaBean一样注入远程的Dubbo服务Bean?我们知道,Dubbo将服务调用封装成普通的Spring的Bean,于是我们可以像使用本地的Spring Bean一样,来调用远端的Dubbo服务,并有LoadBalance和Failover的功能。现在,我们从源码的角度来看看,Dubbo是如何做到这点的。我们知道,要成为Dubbo服...原创 2016-09-21 13:06:40 · 8425 阅读 · 7 评论 -
Dubbo源代码实现三:注册中心Registry
我们知道,对于服务治理框架来说,服务通信(RPC)和服务管理两部分必不可少,而服务管理又分为服务注册、服务发现和服务人工介入,我们来看看Dubbo框架的结构图(来源网络): 图中可以看出,服务提供者Provider往服务注册中心Registry注册服务,而的消费者Consumer从服务注册中心订阅它需要的服务,而不是全部服务,当有新的Provider出现,或者现有Provider宕机,注册原创 2016-11-03 20:43:20 · 22476 阅读 · 3 评论 -
Dubbo源代码实现一:切入Spring
Dubbo是阿里开源的一个高性能服务框架,提供了服务注册、RPC服务调用、调用均衡、服务监控和服务failover等功能。如果你还未使用过Dubbo框架,请先参考dubbo提供的官方文档,比如:http://www.oschina.net/p/dubbo?fromerr=iVZFqWON。 Dubbo框架中有两个重要角色:(服务)提供者和(服务)消费者,这里为了简单起见,将包含了原创 2016-09-21 13:05:36 · 3406 阅读 · 5 评论