Dubbo源码学习
文章平均质量分 87
个人的一个Dubbo学习记录,结合官方文档和个人理解,后续会逐渐补充
六六不牛
正在努力的码农
展开
-
12-学完dubbo补充知识
补充知识 1、自定义标签 1.1、自定义标签的使用 1、定义一个Bean package com.example.custom; public class User { private String userName; private String email; public String getUserName() { return userName; } public void setUserName(String userName) {原创 2021-12-13 11:00:51 · 279 阅读 · 0 评论 -
11-Dubbo初学-服务调用
服务调用 学完了所有的基础知识,终于可以看服务调用的过程了,可以说是对之前学习的各个部分知识的一个串联。 Dubbo 服务调用过程比较复杂,包含众多步骤,比如发送请求、编解码、服务降级、过滤器链处理、序列化、线程派发以及响应请求等步骤。 通过一张图了解 Dubbo 服务调用过程 首先服务消费者通过代理对象 Proxy 发起远程调用,接着通过网络客户端 Client 将编码后的请求发送给服务提供方的网络层上,也就是 Server。Server 在收到请求后,首先要做的事情是对数据包进行解码。然后将解码后的请原创 2021-12-13 11:00:19 · 678 阅读 · 0 评论 -
10-Dubbo初学-负载均衡
负载均衡 LoadBalance 中文意思为负载均衡,它的职责是将网络请求,或者其他形式的负载“均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况。 通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。 负载均衡可分为软件负载均衡和硬件负载均衡。在我们日常开发中,一般很难接触到硬件负载均衡。但软件负载均衡还是可以接触到的,比如 Nginx。 在 Dubbo 中,也有负载均衡的概念和相应的实现。Dubbo 需要对服原创 2021-12-10 15:57:51 · 104 阅读 · 0 评论 -
9-Dubbo初学-集群
服务集群 为了避免单点故障,现在的应用通常至少会部署在两台服务器上。对于一些负载比较高的服务,会部署更多的服务器。这样,在同一环境下的服务提供者数量会大于1。对于服务消费者来说,同一环境下出现了多个服务提供者。这时会出现一个问题,服务消费者需要决定选择哪个服务提供者进行调用。另外服务调用失败时的处理措施也是需要考虑的,是重试呢,还是抛出异常,亦或是只打印异常等。 为了处理这些问题,Dubbo 定义了集群接口 Cluster 以及 Cluster Invoker。集群 Cluster 用途是将多个服务提供者合原创 2021-12-10 15:57:14 · 129 阅读 · 0 评论 -
8-Dubbo初学-路由
服务路由 上一篇文章分析了集群容错的第一部分 — 服务目录 Directory。服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由,筛选出符合路由规则的服务提供者。 服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者。Dubbo 目前提供了三种服务路由实现,分别为条件路由 ConditionRouter、脚本路由 ScriptRouter 和标签路由 TagRouter。主要分析条件路由 条件路由规则由两个条件组成,分别用于对服原创 2021-12-10 15:56:34 · 251 阅读 · 0 评论 -
7-Dubbo初学-服务目录
服务目录 在进行深入分析之前,我们先来了解一下服务目录是什么。服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获取到服务提供者的信息,比如 ip、端口、服务协议等。通过这些信息,服务消费者就可通过 Netty 等客户端进行远程调用。在一个服务集群中,服务提供者数量并不是一成不变的,如果集群中新增了一台机器,相应地在服务目录中就要新增一条服务提供者记录。或者,如果服务提供者的配置修改了,服务目录中的记录也要做相应的更新。如果这样说,服务目录和注册中心的功能不就雷同了吗?确实如此,这里这么原创 2021-12-10 15:56:03 · 181 阅读 · 0 评论 -
6-Dubbo初学-consumer
服务引用 上面说完服务导出,接下来说下服务引用,位于consumer侧,在 Dubbo 中,我们可以通过两种方式引用远程服务。第一种是使用服务直连的方式引用服务,第二种方式是基于注册中心进行引用。服务直连的方式仅适合在调试或测试服务的场景下使用,不适合在线上环境使用。因此,本文我将重点分析通过注册中心引用服务的过程。从注册中心中获取服务配置只是服务引用过程中的一环,除此之外,服务消费者还需要经历 Invoker 创建、代理类创建等步骤。这些步骤,将在后续章节中一一进行分析。 1、服务引用原理 Dubbo 服原创 2021-12-10 15:55:30 · 738 阅读 · 0 评论 -
5-Dubbo初学-provider
服务导出 Dubbo 服务导出过程始于 Spring 容器发布刷新事件,Dubbo 在接收到事件后,会立即执行服务导出逻辑。整个逻辑大致可分为三个部分,第一部分是前置工作,主要用于检查参数,组装 URL。第二部分是导出服务,包含导出服务到本地 (JVM),和导出服务到远程两个过程。第三部分是向注册中心注册服务,用于服务发现。本篇文章将会对这三个部分代码进行详细的分析。 服务导出的入口方法是 ServiceBean 的 onApplicationEvent。onApplicationEvent 是一个事件响应原创 2021-12-10 15:54:54 · 1247 阅读 · 0 评论 -
4-Dubbo初学-SPI
Dubbo SPI SPI(Service Provider Interface)简单来说就是对一个接口进行扩展。可以通过服务加载的方式,获取到所有配置的实现类 一、java SPI机制 创建一个接口 public interface ILog { void warn(String msg); } 两个接口实现 public class ConsoleLogImpl implements ILog { public void warn(String msg) { Syste原创 2021-12-10 15:54:16 · 268 阅读 · 0 评论 -
3-Dubbo初学-配置
Dubbo源码初学 一、XML文件配置 和spring一样,了解dubbo的第一步就是了解配置文件(以xml文件为例) 服务提供者provider.xml <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo" xmlns="http://www.springframework.org/schema/bean原创 2021-12-10 15:53:35 · 268 阅读 · 0 评论 -
2-Dubbo初学-主干
Dubbo主干 1、Dubbo SPI 2、SPI自适应拓展 3、集群容错——服务目录 Directory、服务路由 Router、集群 Cluster 和负载均衡 LoadBalance 3.1、服务目录 3.1.1、StaticDirectory 3.1.2、RegistryDirectory 3.1.2.1、列举 Invoker 3.1.2.2、接收服务变更通知 3.1.2.3、刷新 Invoker 列表 3.2、服务路由 ...原创 2021-12-10 15:53:02 · 1090 阅读 · 0 评论 -
1-Dubbo初学-框架
Dubbo 1、dubbo文件核心目录 1.1、dubbo-common Dubbo通用模块,定义了业务无关的工具类例如io处理、日志处理、配置处理、类处理等等操作,以及对于线程池的扩展,二进制编码处理,class编译处理,json数据处理,数据持久化接口处理等等。 1.2、dubbo-rpc-api 分布式服务调用框架RPC的核心基本实现,可以看到其中提供了很多的RPC抽象类、接口和实现类,包括服务发布,服务调用,远程调用,RPC调用网络协议,RPC条用监听和过滤器等功能。提供了默认的基于Dubb原创 2021-12-10 15:52:14 · 1567 阅读 · 0 评论