每个时代,都不会亏待会学习的人. 大家好,我是 yes. 这次本来是打算写一篇 RocketMQ 相关文章的,但是被插队了,我也是没想到的. 说来也是巧最近在看 Dubbo 源码,然后发现了一处很奇怪的代码,于是就有了这篇文章,让我们来看一下这段代码,它属于 ChannelEventRunnable,这个 runnable 是 Dubbo IO 线程创建,将此任务扔到业务线程池中处理. 看到没,把 state == ChannelState.RECEIVED 拎出来独立一个 if,而其他的 st…
通过Maven构建dubbo 既然可以下载得到源码以及发布包,那么为什么要去构建dubbo呢?,我们先来看下dubbo的主要模块: 我们不仅要使用dubbo的核心框架,还要使用它的一些服务,比如管理控制台.监控中心和注册中心等等.Dubbo的核心框架是可以在maven的中央仓库下载到,而相关的服务(比如上图中管理控制台.简易控制中心.简易注册中心.示例提供者和示例消费者)是下载不到的,必须由我们自己基于dubbo的源码通过Maven进行构建. 我们这里教给大家如何自己构建dubbo,还有一个原因…
注: 本系列文章已捐赠给 Dubbo 社区,你也可以在 Dubbo 官方文档中阅读本系列文章. 1. 简介 在前面的文章中,我们分析了 Dubbo SPI.服务导出与引入.以及集群容错方面的代码.经过前文的铺垫,本篇文章我们终于可以分析服务调用过程了.Dubbo 服务调用过程比较复杂,包含众多步骤.比如发送请求.编解码.服务降级.过滤器链处理.序列化.线程派发以及响应请求等步骤.限于篇幅原因,本篇文章无法对所有的步骤一一进行分析.本篇文章将会重点分析请求的发送与接收.编解码.线程派发以及响应的发…
1.简介 LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载"均摊"到不同的机器上.避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况.通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载.在为高负载的服务器分流的同时,还可以避免资源浪费,一举两得.负载均衡可分为软件负载均衡和硬件负载均衡.在我们日常开发中,一般很难接触到硬件负载均衡.但软件负载均衡还是能够接触到一些的,比如 Nginx.在 Dubbo 中,也有负载均衡的概念和相应的实现…
1.简介 为了避免单点故障,现在的应用至少会部署在两台服务器上.对于一些负载比较高的服务,会部署更多台服务器.这样,同一环境下的服务提供者数量会大于1.对于服务消费者来说,同一环境下出现了多个服务提供者.这时会出现一个问题,服务消费者需要决定选择哪个服务提供者进行调用.另外服务调用失败时的处理措施也是需要考虑的,是重试呢,还是抛出异常,亦或是只打印异常等.为了处理这些问题,Dubbo 定义了集群接口 Cluster 以及及 Cluster Invoker.集群 Cluster 用途是将多个服务提…
1. 简介 上一篇文章分析了集群容错的第一部分 -- 服务目录 Directory.服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由.上一篇文章关于服务路由相关逻辑没有细致分析,一笔带过了,本篇文章将对此进行详细的分析.首先,先来介绍一下服务路由是什么.服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者.Dubbo 目前提供了三种服务路由实现,分别为条件路由 ConditionRouter.脚本路由 ScriptR…
1.服务导出过程 本篇文章,我们来研究一下 Dubbo 导出服务的过程.Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑.整个逻辑大致可分为三个部分,第一是前置工作,主要用于检查参数,组装 URL.第二是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程.第三是向注册中心注册服务,用于服务发现.本篇文章将会对这三个部分代码进行详细的分析,在分析之前,我们先来了解一下服务的导出过程. Dubbo 支持两种服务导出方式,…
1.原理 我在上一篇文章中分析了 Dubbo 的 SPI 机制,Dubbo SPI 是 Dubbo 框架的核心.Dubbo 中的很多拓展都是通过 SPI 机制进行加载的,比如 Protocol.Cluster.LoadBalance 等.有时,有些拓展并非想在框架启动阶段被加载,而是希望在拓展方法被调用时,根据运行时参数进行加载.这听起来有些矛盾.拓展未被加载,那么拓展方法就无法被调用(静态方法除外).拓展方法未被调用,就无法进行加载,这似乎是个死结.不过好在也有相应的解决办法,通过代理模式就可…
服务端发布流程: dubbo 是基于 spring 配置来实现服务的发布的,对于dubbo 配置文件中看到的<dubbo:service>等标签都是服务发布的重要配置 ,对于这些提供可配置化的支持,spring功不可没,spring提供了可拓展的Schema的支持.也就是自定义标签的使用,这样 dubbo基于这样的规范实现自己的拓展,以至于我们在项目中可以使用dubbo所定义的标签.在实现这个拓展的前提是要把spring的Core包加入项目中.具体的加载在Spring源码深度解析一书中有详细介…
前言 在上一篇的末尾,我们提到了dubbo的spi中增加了IoC和AOP的功能.那么本篇就讲一下这个增加的IoC,spi部分预计会有四篇,因为这东西实在是太重要了.温故而知新,我们先来回顾一下,我们之前都讲了什么. spi(1) 主要讲了spi的基本概念,简单的入门,并以spi为线索讲解了双亲委托模式的弊端以及解决方案 spi(2) 主要以dubbo改进了jdk的spi为线索,重点讲分析问题的思路,从实际案例实战从哪里着手分析问题这个大家最喜欢问的问题. 提到IoC,大家第一个想到的就是Spri…