1. 前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 源码分析均基于官方Demo,路径:dubbo/dubbo-demo 如果没有看过之前Dubbo系列的文章,建议先去看看。因为服务调用过程涉及范围较广,需要那些前置知识。 Dubbo 服务调用过程比较复杂,包含众多步骤,比如发送请求、编解码、服务降级、过滤器链处理、序列化、线程派发以及响应请求等步骤。限于篇幅原因,本篇文章无法对所有的步骤一一进行分析。后续挖坑再说吧。本篇文章将会重点分析请求的发送与接收、线程…

2022年8月31日 0条评论 135点热度 0人点赞 王谷雨 阅读全文

前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行。 例如:在Dubbo中,同一个服务有多个服务提供者,每个服务提供者所在的机器性能不一致。如果流量均匀分摊,则会导致有些服务提供者负载过高,有些则轻轻松松,导致资源浪费。负载均衡就解决这个问题。 源码 LoadBalance就是负载均衡的接口,咱们先看看类图 Dubbo提供了4中内置的负载均衡实现: …

2022年8月16日 0条评论 132点热度 0人点赞 王谷雨 阅读全文

前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 集群(cluster)就是一组计算机,它们作为一个总体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。 在Dubbo中,为了避免单点故障,同一个服务允许有多个服务提供者,也允许同时连接多个注册中心。那么,服务消费者引用服务时,该请求哪个注册中心的服务提供者以及调用失败之后该如何处理呢?这些就是Dubbo集群所做的事。 集群容错 在分析集群源码之前,先看看集群容错的所有组件,下图是官方文档的…

2022年8月10日 0条评论 207点热度 0人点赞 王谷雨 阅读全文

前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 今天,来聊点短的,服务路由Router,本文讲的是路由的调用路径,不讲路由的规则解析。想了解规则解析的可以去官方文档:服务路由 Dubbo的路由,就是根据规则,规定了哪些服务消费者可调用哪些服务提供者。 怎么用 我们可以在服务治理控制台Dubbo-Admin写入路由规则。 安装Dubbo-Admin 我是使用docker方式安装的,命令如下: docker run -d \ -p 9001:8080 \ -e a…

2022年8月3日 0条评论 875点热度 0人点赞 王谷雨 阅读全文

前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 今天,来聊聊Dubbo的服务目录(Directory)。下面是官方文档对服务目录的定义: 服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获取到服务提供者的信息,比如 ip、端口、服务协议等。 服务目录持有Invoker对象集合,Dubbo的服务调用均由Invoker发起。 当服务提供者信息发生变化时(比如某一个服务挂了),服务目录也需要动态调整。 继承体系 服务目录目前内置的实现有两个,分…

2022年7月29日 0条评论 264点热度 0人点赞 王谷雨 阅读全文

前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 上一篇文章,讲了Dubbo的服务导出: Dubbo源码(三) - 服务导出(生产者) 本文,咱们来聊聊Dubbo的服务引用。 本文案例来自Dubbo官方Demo,路径为: dubbo/dubbo-demo/dubbo-demo-consumer/ 服务引用原理 Dubbo服务引用对象的生成,是在ReferenceBean#getObject()方法中 其生成时机有两个: 饿汉式 ReferenceBean对象继承…

2022年7月27日 0条评论 270点热度 0人点赞 王谷雨 阅读全文

前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 在了解了Dubbo SPI后,我们来了解下Dubbo服务导出的过程。 Dubbo的配置是通过DubboNamespaceHandler读取解析的,其中会将Dubbo服务提供者封装成ServiceBean注入Spring容器中。而服务导出就是在ServiceBean的onApplicationEvent开始的。 想了解DubboNamespaceHandler的工作原理,请自行去了解Spring自定义标签,本文略。…

2022年7月25日 0条评论 208点热度 0人点赞 王谷雨 阅读全文

前情提要 假设你已经知道Dubbo SPI的使用方式,不知道的请出门左转: Dubbo源码(一) - SPI使用 Dubbo源码地址: apache/dubbo 本文使用版本:2.6.x 测试Demo 新建SPI测试接口以及实现类 package com.javaedit.spi; import com.alibaba.dubbo.common.URL; // 定义SPI接口 @SPI public interface Robot { void sayHello(URL url); } // 自动注入演示 publ…

2022年7月20日 0条评论 142点热度 0人点赞 王谷雨 阅读全文

为什么学SPI Dubbo 的可扩展性是基于 SPI 去实现的,而且Dubbo所有的组件都是通过 SPI 机制加载。 什么是SPI SPI 全称为 (Service Provider Interface) ,是一种服务提供发现机制。可以将服务接口与服务实现分离以达到解耦可拔插、大大提升了程序可扩展性。 说人话: 一个接口有多个实现类,具体使用哪个实现类,通过SPI机制让用户来决定。也就是,定好规范,实现允许百花齐放。 举栗子: 以JDBC为例,Java提供了JDBC API用来连接 Java 编程语言和广泛的数据库…

2022年7月19日 0条评论 162点热度 1人点赞 王谷雨 阅读全文