Dubbo笔记篇
文章平均质量分 96
笔记
猫吻鱼
不是我鸽,是我太忙。
感觉要猝死
展开
-
Dubbo笔记 ㉘ : 服务自省-消费者
一、前言二、前情回顾四、消费者的发现过程1. 前置操作在 Dubbo笔记 ㉕ : Spring 执行流程概述 中我们讲了Dubbo 提供了ReferenceAnnotationBeanPostProcessor 来处理被 通过 @Reference 注解引用的 Dubbo服务。其中会通过 ReferenceAnnotationBeanPostProcessor#doGetInjectedBean 方法来创建 Dubbo 服务代理类,如下: @Override protect原创 2021-11-23 19:35:05 · 2238 阅读 · 0 评论 -
Dubbo笔记 ㉗ : 服务自省-提供者
一、前言Dubbo服务自省,以及 2.7.5 的优势分析。要研究 : Dubbo2.7.5 的 应用粒度服务注册,即 服务自省。如何实现,优势等https://mp.weixin.qq.com/s/V5S_vO6Mgtq9-v2ed9eDrwhttps://blog.csdn.net/weixin_45583158/article/details/103900690https://www.jianshu.com/p/8f72c14f6a79...原创 2021-11-23 19:28:47 · 4385 阅读 · 2 评论 -
Dubbo笔记 ㉖ : DubboBootstrap 的服务暴露
一、前言二、DubboBootstrapDubboBootstrap 是 Dubbo 服务启动的核心类。1. 构造函数DubboBootstrap 是单例的,其构造函数如下: private DubboBootstrap() { // 获取 配置管理 configManager = ApplicationModel.getConfigManager(); // 获取 环境 environment = ApplicationModel原创 2021-11-11 16:04:47 · 3155 阅读 · 0 评论 -
Dubbo笔记 ㉕ : Spring 执行流程概述
一、前言等写到这一篇,估计得小半年后。。。。原创 2021-10-12 18:13:08 · 1197 阅读 · 0 评论 -
Dubbo笔记 ㉔ :元数据中心
一、前言本文仅为留存。详细的元数据中心内容 推荐:https://www.freesion.com/article/3146497596/我一向不擅长写介绍三大中心指的:注册中心,元数据中心,配置中心。在 2.7 之前的版本,Dubbo 只配备了注册中心,主流使用的注册中心为 zookeeper。新增加了元数据中心和配置中心,自然是为了解决对应的痛点,下面我们来详细阐释三大中心改造的原因。5.1 元数据改造元数据是什么?元数据定义为描述数据的数据,在服务治理中,例如服务接口名,重试次数,版本号原创 2021-08-31 17:47:29 · 1913 阅读 · 0 评论 -
Dubbo笔记 ⑰ :Dubbo Filter 详解
一、前言META-INF/dubbo/internalcache=org.apache.dubbo.cache.filter.CacheFiltervalidation=org.apache.dubbo.validation.filter.ValidationFilterecho=org.apache.dubbo.rpc.filter.EchoFiltergeneric=org.apache.dubbo.rpc.filter.GenericFiltergenericimpl=org.apache原创 2021-07-06 20:40:49 · 2749 阅读 · 4 评论 -
Dubbo笔记 ㉓ :Dubbo协议与网络传输
通过之前的阅读,我们发现,无论是消费者还是生产者,在建立Netty 连接时都会注册 编码器和解码器Handler,用于编码和解码数据。简单来说,数据在网络上传播是按照某种格式传播,而这里的编码和解码就是在发送数据前将数据转化为规定的格式再发送,在接收数据时将数据从规定格式转换为我们可接收的格式。原创 2021-08-24 20:33:49 · 1436 阅读 · 0 评论 -
Dubbo笔记 ⑪ : 消费者调用流程
一、前言本系列为个人Dubbo学习笔记,内容基于《深度剖析Apache Dubbo 核心技术内幕》, 过程参考官方源码分析文章,仅用于个人笔记记录。本文分析基于Dubbo2.7.0版本,由于个人理解的局限性,若文中不免出现错误,感谢指正。...原创 2021-08-21 12:49:29 · 868 阅读 · 0 评论 -
Dubbo笔记 ㉒ :配置中心
本系列为个人Dubbo学习笔记衍生篇,是正文篇之外的衍生内容,内容来源于《深度剖析Apache Dubbo 核心技术内幕》, 过程参考[官方源码分析文章](https://dubbo.apache.org/zh/docs/v2.7/dev/source/)。仅用于个人笔记记录。本文分析基于Dubbo2.7.0版本,由于个人理解的局限性,若文中不免出现错误,感谢指正。原创 2021-08-12 19:48:15 · 2108 阅读 · 0 评论 -
Dubbo笔记 ㉑ :提供者的异步执行
一、前言1. 概述在Provider端非异步执行时,对调用方发来的请求的处理是在Dubbo内部线程模型的线程池里的线程中执行的。在Dubbo中,服务提供方提供的所有服务接口都是使用这一个线程池来执行的,所以当一个服务执行比较耗时时,可能会占用线程池中很多线程,从而导致其他服务的处理收到影响。Provider端异步执行则将服务的处理逻辑从Dubbo内部线程池切换到业务自定义线程,避免Dubbo线程池中的线程被过度占用,有助于避免不同服务间的互相影响。但需要注意的是,Provider端异步执行对节省资源原创 2021-07-27 19:49:30 · 1454 阅读 · 0 评论 -
Dubbo笔记 ⑳ :消费者的异步调用
一、前言从2.7.0版本开始,Dubbo以CompletableFuture为基础支持所有异步编程接口,解决了2.7.0之前的版本异步调用的不便与功能缺失。异步调用是基于NIO 的非阻塞能力实现并行调用,服务消费端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小。1. 逻辑图中步骤1是当服务消费端发起RPC调用时使用的用户线程,用户线程首先使用步骤2创建一个Future对象,接着步骤3会把请求转换为I/O线程来执行,步骤3为异步过程,所以会马上返回,然后用户线程使用步骤4把其创建的原创 2021-07-27 19:45:21 · 1118 阅读 · 0 评论 -
Dubbo笔记 ⑲ :隐式参数传递
一、前言Dubbo提供了隐式参数传递的功能,即服务调用方可以通过RpcContext.getContext().setAttachment()方法设置附加属性键值对,然后设置的键值对可以在服务提供方服务方法内获取。二、简易demo@Servicepublic class MainSimpleDemoServiceImpl implements SimpleDemoService { @Override public String sayHello(String msg) {原创 2021-07-21 16:27:06 · 2371 阅读 · 1 评论 -
Dubbo笔记 ⑱ :泛化调用 & 泛化实现
一、前言二、泛化调用1. 泛化调用2. 泛化实现泛化调用分两种情况消费端非泛化,服务端泛化消费端泛化,服务端不泛化消费、服务都泛化三、源码实现1.1 GenericImplInvokerFilter/** * GenericImplInvokerFilter */@Activate(group = Constants.CONSUMER, value = Constants.GENERIC_KEY, order = 20000)public class GenericImpl原创 2021-07-21 14:59:57 · 5127 阅读 · 0 评论 -
Dubbo源码分析:全集整理
文章目录一、前言二、目录1. 源码篇2. 衍生篇一、前言本文是Dubbo源码分析目录集整理,方便后续查找。本文持续更新中。二、目录1. 源码篇2. 衍生篇原创 2021-06-17 19:35:36 · 3457 阅读 · 2 评论 -
Dubbo笔记 ⑯ :Dubbo集群组件 之 LoadBalance
当服务提供方是集群时,为了避免大量请求一直集中在一个或者几个服务提供方机器上,从而使这些机器负载很高,甚至导致服务不可用,需要做一定的负载均衡策略。Dubbo提供了多种均衡策略,默认为random,也就是每次随机调用一台服务提供者的服务。原创 2021-06-04 16:31:43 · 1092 阅读 · 1 评论 -
Dubbo笔记 ⑮ :Dubbo集群组件 之 Router
服务目录在刷新 Invoker 列表的过程中,会通过 Router 进行服务路由,筛选出符合路由规则的服务提供者。在详细分析服务路由的源码之前,先来介绍一下服务路由是什么。服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者。原创 2021-06-04 16:31:00 · 1710 阅读 · 0 评论 -
Dubbo笔记 ⑭ :Dubbo集群组件 之 Directory
一、前言在 Dubbo 中 存在 SPI 接口 org.apache.dubbo.rpc.cluster.Directory。本文着重于RegistryDirectory 的分析,对于其他部分的描述,基本是直接照搬官方文档,不过由于Dubbo版本的不同,部分代码具有一定差异性,描述相较于官方文档有改动。另为了完整描述 Directory 的功能作用,部分描述照搬之前的文章。1. DirectoryDirectory 即服务目录, 服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获原创 2021-06-04 16:28:29 · 969 阅读 · 2 评论 -
Dubbo笔记 ⑬ :Dubbo 集群组件 之 Cluster & ClusterInvoker
Dubbo集群容错中存在两个概念,分别是集群接口 Cluster 和 Cluster Invoker,这两者是不同的。Cluster 是接口,而 Cluster Invoker 是一种 Invoker。服务提供者的选择逻辑,以及远程调用失败后的的处理逻辑均是封装在 Cluster Invoker 中。而 Cluster 接口和相关实现类的用途比较简单,仅用于生成 Cluster Invoker。**简单来说,Cluster 就是用来创建 Cluster Invoker 的,并且一一对应。而Cluster 和原创 2021-06-04 16:17:53 · 1962 阅读 · 2 评论 -
Dubbo笔记 ⑫ :Dubbo 集群组件概述
一、前言1. 简介为了避免单点故障,现在的应用通常至少会部署在两台服务器上。对于一些负载比较高的服务,会部署更多的服务器。这样,在同一环境下的服务提供者数量会大于1。对于服务消费者来说,同一环境下出现了多个服务提供者。这时会出现一个问题,服务消费者需要决定选择哪个服务提供者进行调用。另外服务调用失败时的处理措施也是需要考虑的,是重试呢,还是抛出异常,亦或是只打印异常等。为了处理这些问题,Dubbo 定义了集群接口 Cluster 以及 Cluster Invoker。集群 Cluster 用途是将多个服原创 2021-06-04 16:17:04 · 611 阅读 · 2 评论 -
Dubbo笔记 ⑩ : 消费者启动流程 - DubboProtocol#refer
一、前言本系列为个人Dubbo学习笔记,内容基于《深度剖析Apache Dubbo 核心技术内幕》, 过程参考官方源码分析文章,仅用于个人笔记记录。本文分析基于Dubbo2.7.0版本,由于个人理解的局限性,若文中不免出现错误,感谢指正。在之前的文章中我们知道,对于服务消费者来说,其会服务消费者 Exchangers#connect(url, requestHandler) 和 服务提供者的 Exchangers#bind过程类似1. 调用链路Exchangers.connect(url, re原创 2021-05-15 16:15:48 · 880 阅读 · 1 评论 -
Dubbo笔记 ⑨ : 消费者启动流程 - RegistryProtocol#refer
一、前言本系列为个人Dubbo学习笔记,内容基于《深度剖析Apache Dubbo 核心技术内幕》, 过程参考官方源码分析文章,仅用于个人笔记记录。本文分析基于Dubbo2.7.0版本,由于个人理解的局限性,若文中不免出现错误,感谢指正。在 Dubbo笔记⑧ : 消费者启动流程 - ReferenceConfig#get 一文中,我们介绍到在存在注册中心的情况下,ReferenceConfig#createProxy 在创建提供者代理的时候,会调用 RegistryProtocol#refer 将 U原创 2021-05-15 16:15:37 · 1752 阅读 · 1 评论 -
Dubbo笔记 ⑧ : 消费者启动流程 - ReferenceConfig#get
一、前言首先看一下消费者启动时序图我们可以通过 如下代码获取到服务提供方的引用,从而进行服务调用,那么毋庸置疑,消费者的处理流程在 ReferenceConfig#get 方法中 DemoService demoService = referenceConfig.get();二、ReferenceConfig#get public synchronized T get() { // 检查并更新缺省配置 checkAndUpdateSubConfigs();原创 2021-05-15 16:01:28 · 3566 阅读 · 1 评论 -
Dubbo笔记 ⑦ : 服务请求处理流程
一、前言本系列为个人Dubbo学习笔记,内容来源于《深度剖析Apache Dubbo 核心技术内幕》,仅用于个人笔记记录。本文分析基于Dubbo2.7.0版本,由于个人理解的局限性,若文中不免出现错误,感谢指正。二、...原创 2021-05-07 10:30:32 · 1632 阅读 · 0 评论 -
Dubbo笔记 ⑤ : 服务发布流程 - Protocol#export
一、前言RegistryProtocol 与 DubboProtocol的区别RegistryProtocol 可以认为并不是一个真正的协议,他是这些实际的协议(dubbo . rmi)包装者,这样客户端的请求在一开始如果没有服务端的信息,会先从注册中心拉取服务的注册信息,然后再和服务端直连,这个很重要,因为在我司是通过注册中心进行路由转发信息的。URL 协议头不同,RegistryProtocol 通过 URL 的 registry:// 协议头标识, DubboProtocol通过 URL 的du原创 2021-04-17 15:12:12 · 2024 阅读 · 2 评论 -
Dubbo笔记 ④ : 服务发布流程 - doExportUrlsFor1Protocol
一、前言本系列为个人Dubbo学习笔记,内容来源于《深度剖析Apache Dubbo 核心技术内幕》,仅用于个人笔记记录。本文分析基于Dubbo2.7.0版本,由于个人理解的局限性,若文中不免出现错误,感谢指正。在上篇中我们了解到服务发布时,首先会解析出来所有的注册中心 registryURLs,再针对不同的协议类型进行服务发布。具体的发布流程在 ServiceConfig#doExportUrlsFor1Protocol 中。下面我们来具体看一下。(俄罗斯套娃,一层套一层,所以本篇还没写完)。二原创 2021-04-16 17:55:06 · 3485 阅读 · 2 评论 -
Dubbo笔记 ③ : 服务发布流程 - ServiceConfig#export
一、前言二、 public synchronized void export() { checkAndUpdateSubConfigs(); // 获取到服务提供者的属性: 是否导出服务,是否延迟发布 if (provider != null) { if (export == null) { export = provider.getExport(); } i原创 2021-04-12 18:19:56 · 1691 阅读 · 2 评论 -
Dubbo笔记 ② : 架构概述
一、前言二、分层ServiceConfigProxy : 对服务消费者,将本地调用转换成远程Rpc调用;对服务提供者,提供代理,将实现类转换为Wrapper 。默认实现 JavassistProxyFactoryRegistry : 服务启动后注册自身以及获取服务列表。扩展接口 Registry 实现ZookeeperRegistry、RedisRegistry 等。扩展接口RegistryFactory 对应扩展实现DubboRegistryFactory、RedisRegistryFact原创 2021-03-29 19:38:31 · 880 阅读 · 0 评论 -
Dubbo笔记 ① : 入门篇
一、前言Dubbo 版本 2.71. Dubbo 架构https://dubbo.apache.org/zh/docs/v2.7/user/preface/architecture/二、简易Demo1. SDK 定义public interface GreetingService { /** * 同步调用sayHello * @param name * @return */ String sayHello(String name);原创 2021-03-15 18:02:03 · 1499 阅读 · 2 评论