
dubbo
文章平均质量分 79
Java道哥
汲取 传承 打造开源影响力
展开
-
Dubbo的多种序列化算法(含transient 关键字在dubbo序列化的使用、作用)
RPC 框架需要通过网络通信实现跨 JVM 的调用。既然需要网络通信,那就必然会使用到序列化与反序列化的相关技术,Dubbo 也不例外。1 JDK序列化操作1.1 实现 Serializable 接口被序列化对象实现 Serializable 接口。public class Student implements Serializable { private static final long serialVersionUID = 1L; private Strin转载 2022-02-07 15:10:19 · 962 阅读 · 0 评论 -
【有料】Dubbo——Proxy 层代理分析
前言在介绍 DubboProtocol 的相关实现时,知道 Protocol 这一层以及Cluster 层暴露出来的接口都是 Dubbo 内部的一些概念,业务层无法直接使用。为了让业务逻辑能够无缝使用 Dubbo,就需要将业务逻辑与 Dubbo 内部概念打通,这就用到了动态生成代理对象的功能。Proxy 层在 Dubbo 架构中的位置如下所示(虽然在架构图中 Proxy 层与 Protocol 层距离很远,但 Proxy 的具体代码实现就位于 dubbo-rpc-api 模块中):在 .转载 2021-12-14 10:20:26 · 1250 阅读 · 0 评论 -
Dubbo介绍2- 源码分析,通过schema启动服务
前言spring2.5以后,spring支持自定义schema扩展xml配置。具体的spring schema细节,本文就不多说了。这篇文章就拿provider为例,介绍dubbo是如何启动服务的。正文首先,再把HelloWolrd例子中的 provider.xml的源码放上来Xml代码<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.or...转载 2021-12-06 00:26:06 · 164 阅读 · 0 评论 -
【有料】DUBBO配置规则详解
#DUBBO配置规则详解#欢迎加入DUBBO交流群:259566260研究DUBBO也已经大半年了,对它的大部分源码进行了分析,以及对它的内部机制有了比较深入的了解,以及各个模块的实现。DUBBO包含很多内容,如果想了解DUBBO第一步就是启动它,从而可以很好的使用它,那么如何更好的使用呢?就需要知道DUBBO的各个配置项,以及它可以通过哪些途径进行配置。个人对配置的理解,就好比时对动物的驯服,如何很好的驯服一头猛兽,那就需要知道它各种习性,从而调整,已达到自己期望的结果。这篇不对DUBBO有哪转载 2021-12-03 00:05:11 · 809 阅读 · 0 评论 -
dubbo 加载Bean和远程调用分析(1)
这里只讲解dubbo注册的bean1. dubbo consumer 加载bean dubbo-2.5.3.jar!/spring.handlershttp\://code.alibabatech.com/schema/dubbo=com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandlerDubboNamespaceHandler 是dubbo命名空间自定义配置文件的解析处理器public class DubboName.转载 2021-12-01 17:20:05 · 423 阅读 · 0 评论 -
Dubbo中集群Cluster,负载均衡,容错,路由解析
Dubbo中的Cluster可以将多个服务提供方伪装成一个提供方,具体也就是将Directory中的多个Invoker伪装成一个Invoker,在伪装的过程中包含了容错的处理,负载均衡的处理和路由的处理。这篇文章介绍下集群相关的东西,开始先对着文档解释下容错模式,负载均衡,路由等概念,然后解析下源码的处理。(稍微有点乱,心情不太好,不适合分析源码。)集群的容错模式Failover Cluster这是dubbo中默认的集群容错模式失败自动切换,当出现失败,重试其它服务器。 通常用于读操作,但转载 2021-11-04 23:20:08 · 798 阅读 · 0 评论 -
dubbo-客户端注册监听
背景dubbo 在使用 zookeeper(zk) 作为注册中心的时候,是通过订阅zk的watch监听机制来达到更新最新服务提供者列表的目的,其中大致流程如下。今天我们主要分析红色订阅,以及处理的逻辑。订阅在消费者启动阶段根据protocol 会一层层执行到 RegistryProtocol.refer(),org.apache.dubbo.registry.integration.RegistryProtocol#doRefer()private <T> Invok转载 2021-11-04 13:32:55 · 592 阅读 · 0 评论 -
【有料】Dubbo之ZookeeperRegistry源码分析
ZookeeperRegistry的作用ZookeeperRegistry是dubbo中常用的注册中心实现,它主要作用通过Zookeeper的目录监听机制,让消费者能够实时得到在线的提供者列表。并且一些服务治理的功能也是通过zookeeper这个监听特性巧妙的完成。在具体讲解ZookeeperRegistry的相关源码之前,先来分析下dubbo在zookeeper的目录结构以及dubbo如何利用这个特性Zookeeper目录结构dubbo在zookeeper建立的目录是基于接口的,大致如下转载 2021-11-04 13:30:30 · 839 阅读 · 0 评论 -
dubbo集群容错
集群调用失败时,Dubbo 提供的容错方案在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试。各节点关系:这里的Invoker是Provider的一个可调用Service的抽象,Invoker封装了Provider地址及Service接口信息 Directory代表多个Invoker,可以把它看成List<Invoker>,但与List不同的是,它的值可能是动态变化的,比如注册中心推送变更 Cluste...转载 2021-11-02 20:55:13 · 87 阅读 · 0 评论 -
Dubbo(十五)源码解析 之 服务路由
服务路由源码解析1. 什么是服务路由服务路由包含一条(或若干条)路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者。Dubbo 目前提供了三种服务路由实现,分别为条件路由ConditionRouter、脚本路由 ScriptRouter 和标签路由 TagRouter。其中条件路由是我们最常使用的。下面将以条件路由为例来讲解服务路由的用法。2. 路由规则的设置路由规则是在 Dubbo 管控平台 Dubbo-Admin 中的。(1) 启动管控平台A、启动管转载 2021-11-02 20:30:27 · 571 阅读 · 0 评论 -
第三章 dubbo内核之ioc 源代码解析
dubbo的IOC具体实现在:T injectExtension(T instance)方法中。该方法只在三个地方被使用:1 createAdaptiveExtension()2 --injectExtension((T) getAdaptiveExtensionClass().newInstance()) //为创建好的AdaptiveExtensionClass实例进行属性注入3 4 createExtension(String name)5 --injectExtension(insta转载 2021-10-28 13:33:23 · 112 阅读 · 0 评论 -
dubbo源码,ExtensionLoader.strategies属性解析
首先看strategies 属性的定义:private static volatile LoadingStrategy[] strategies = loadLoadingStrategies();点进去看初始化方法:loadLoadingStrategies()private static LoadingStrategy[] loadLoadingStrategies() { return java.util.stream.StreamSupport.stream(jav转载 2021-10-20 17:26:00 · 158 阅读 · 0 评论 -
dubbo源码之服务引用
这个是dubbo 调用的流程图,这篇文件主要要介绍第二步中的服务订阅和第四步代理类的封装过程,这次使用的源码为2.7.1服务引用大致流程Provider将自己的服务暴露出来,注册到注册中心, Consumer从注册中心得知 Provider 的信息,然后自己封装一个调用类对Provider 实现调用。这次使用的源码为2.7.1,采用注解方式引入。dubbo入门服务引用大致流程通过前面文章可以看到,我们这次是采用注解方式引入。因此在初始化引入对应接口类进行属性赋值的时候,会将服务...转载 2021-10-19 16:38:28 · 199 阅读 · 0 评论 -
dubbo源码的一些实现细节【官网】
实现细节Dubbo 代码中的一些实现细节初始化过程细节解析服务基于 dubbo.jar 内的META-INF/spring.handlers配置,Spring 在遇到 dubbo 名称空间时,会回调DubboNamespaceHandler。所有 dubbo 的标签,都统一用DubboBeanDefinitionParser进行解析,基于一对一属性映射,将 XML 标签解析为 Bean 对象。在ServiceConfig.export()或ReferenceConfi...转载 2021-10-18 23:08:20 · 157 阅读 · 0 评论 -
【干货】Dubbo源码解析(四十五)服务引用过程
dubbo服务引用过程目标:从源码的角度分析服务引用过程。前言前面服务暴露过程的文章讲解到,服务引用有两种方式,一种就是直连,也就是直接指定服务的地址来进行引用,这种方式更多的时候被用来做服务测试,不建议在生产环境使用这样的方法,因为直连不适合服务治理,dubbo本身就是一个服务治理的框架,提供了很多服务治理的功能。所以更多的时候,我们都不会选择绕过注册中心,而是通过注册中心的方式来进行服务引用。服务引用过程大致可以分为三个步骤:配置加载 创建invoker 创建服.转载 2021-10-15 16:43:21 · 298 阅读 · 0 评论 -
dubbo剖析:七 网络通信总结
注:文章中使用的dubbo源码版本为2.5.4零、文章目录Dubbo的网络分层抽象 Dubbo如何保证Client端与Server端的连通性 Dubbo编解码协议--解决TCP粘包拆包问题 Dubbo的请求响应模式,如何将异步IO变为同步RPC Dubbo线程模型总结一、Dubbo的网络分层抽象Dubbo整体设计上图为Dubbo整体设计的分层抽象。网络通信位于Remoting模块:Remoting 实现是 Dubbo 协议的实现,如果你选择 RMI 协议,整个 Re转载 2021-10-14 11:33:50 · 242 阅读 · 0 评论 -
Dubbo中重要的概念Invoker、Invocation、Protocol和URL。Dubbo异步调用中的Bug及处理方式
dubbo的调用过程如下图所示dubbo的调用过程1:URL定义了调用的url如协议、协议、参数等信息。还有在拓展加载中选择对应的拓展类如下代码片段所示(isActive(activate, url))public List<T> getActivateExtension(URL url, String[] values, String group) { List<T> exts = new ArrayList<T>(); .转载 2021-10-13 21:19:26 · 587 阅读 · 0 评论 -
Dubbo学习(三):注册中心
前言这篇文章主要记录学习Dubbo注册中心的相关内容,包括:注册中心的工作原理;注册中心的数据结构;订阅发布的实现;缓存机制;重试机制;服务注册与发现流程中Dubbo使用了哪些设计模式。注册中心概述在Dubbo微服务体系中,注册中心是其核心的组件之一。Dubbo通过注册中心实现了分布式环境中各服务之间的注册与发现,是各个分布式节点之间的纽带。主要作用有:(1)动态加入:一个服务提供者通过注册中心可以动态的把自己暴露给其他消费者,无需消费者逐个去更新配置文件。(2)动态发现:一个消费者可以动态转载 2021-10-13 16:47:22 · 1047 阅读 · 0 评论 -
Dubbo——注册中心缓存机制、重试机制
缓存机制缓存的存在就是用空间换取时间,如果每次远程调用都要从注册中心获取一次可调用的服务列表,则会让注册中心承受巨大的流量压力。另外,每次额外的网络请求也会让整个系统的性能下降。因此,Dubbo的注册中心实现了通用的缓存机制,在抽象类AbstractRegistry中实现。消费者或服务治理中心获取注册信息后会做本地缓存。内存中会有一份,保存在Properties对象里,磁盘上也会持久化一份文件,通过file对象引用。在AbstractRegistry抽象类中有如下定义:内存..转载 2021-10-13 16:29:45 · 815 阅读 · 0 评论 -
【Dubbo】为什么要引入注册中心?注册中心存的什么?
在上一篇文章,我们介绍如何使用 Dubbo 进行服务间的远程通信,我们采用的模式是,调用方(Consumer)直接通过 URL 调用 Provider 发布的服务。虽然这样也实现了远程通信的目标,但是作为主流的服务治理组件,最根本的就是要解决大规模集群之后的服务注册和发现的问题,那么,难道我调用一个服务时,需要把集群所有结点 URL 都记下来?要调用很多个服务呢?所以这样使用 Dubbo 在实际开发中势必是不可取的。那怎么办呢?引入注册中心,Provider 把服务发布到注册中心,Consumer 去中转载 2021-10-13 16:22:56 · 722 阅读 · 0 评论 -
dubbo RegistryDirectory 服务目录
1. 简介本篇文章,将开始分析 Dubbo 集群容错方面的源码。集群容错源码包含四个部分,分别是服务目录 Directory、服务路由 Router、集群 Cluster 和负载均衡 LoadBalance。这几个部分的源码逻辑相对比较独立,我们将会分四篇文章进行分析。本篇文章作为集群容错的开篇文章,将和大家一起分析服务目录相关的源码。在进行深入分析之前,我们先来了解一下服务目录是什么。服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获取到服务提供者的信息,比如 ip、端口、服务协转载 2021-10-13 11:29:30 · 334 阅读 · 0 评论 -
dubbo扩展点-Activate注解
1.Activate的作用Activate:可以被框架中自动激活加载扩展,此Annotation用于配置扩展被自动激活加载条件。以上定义有2个关键词,自动激活和加载条件可以参考此篇文章:解释:用户通过group和value配置激活条件,被activate注解的扩展点在满足某种条件时会被激活2.Activate注解的功能定义我们先看看其注解的定义,主要有3个功能定义,可以简化理解为筛选和排序分组(筛选条件) key值(筛选条件) 排序代码示例1@Documented翻译 2021-10-11 13:16:17 · 950 阅读 · 0 评论 -
理解 Dubbo SPI 扩展机制
写在前面 最近接触了 gRPC 体会到虽然众多 RPC 框架各有各的特点但是他们提供的特性和功能有很多的相似之处 , 这就说明他们面对同样的分布式系统带来的问题。从 2016 年左右开始接触到 dubbo ,基本停留在使用的层面,对 dubbo 的设计以及着重要解决的问题都没有系统的研究过,通过对 dubbo 和其他类似 RPC 产品的系统学习 ,学习分布式系统中面临的共同问题以及解决之道。回到顶部微内核架构 微内核架构 (Microkernel architecture)模...转载 2021-10-11 00:26:39 · 98 阅读 · 0 评论 -
【干货】Dubbo死磕之扩展点加载ExetnsionLoader
正文回到顶部dubbo的SPI机制与JDK的SPI机制对比 dubbo一款阿里一款开源的RPC框架,他本身是一款非常复杂的系统,我们主要针对里边的一些核心点来展开分析,其中duboo里的一种核心机制叫SPI( Service Provider Interface)服务发现机制,他是基于原生jdk的SPI机制演化而来。在分析duboo的ExtensionLoader之前,我们先大致了解一下标准JDK的SPI机制。一个最经典的JDK的SPI机制,就是java数据库驱动JDBC,...转载 2021-10-08 12:06:08 · 186 阅读 · 0 评论 -
【干货】dubbo源码阅读——Extension扩展机制
dubbo不仅功能强大,扩展性也非常强,在关键的位置,dubbo都留有扩展接口,比如:协议(Protocol)、集群策略(Cluster)、代理工厂(ProxyFactory)、序列化方式(Serialization)、线程池(ThreadPool)、负载均衡(LoadBalance)等等。每一种扩展都有多种实现,采用策略模式把实现写在/META-INF/dubbo/internal中,然后通过ExtensionLoader类来加载扩展,最终通过一系列的策略选择最正确的那个。这一系列的策略正是今天所讲的内容转载 2021-09-28 11:40:33 · 449 阅读 · 0 评论 -
dubbo-registry-xxxx.cache、dubbo-registry-xxxx.cache.lock,及Failed to save registry store file问题
dubbo的日志中出现了这种信息:[WARN ] 2017-11-03 15:15:20,988--DubboSaveRegistryCache-thread-1--[com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry] [DUBBO] Failed to save registry store file,cause: Can not lock the registry cache file /root/.dubbo/dubbo-regist转载 2021-09-01 22:30:53 · 1802 阅读 · 0 评论 -
dubbo+zookeeper实现服务远程调用
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。主要核心部件:Remoting:网络通信框架,实现了 sync-over-async 和 request-response 消息机制. RPC:(Remote Procedure Call Protocol远程过程调用协议),一个远程过程调用的抽象,支持负载均衡、容灾和集群功能 Registry:服务目录框架用于服务的注册和服务...转载 2021-04-06 21:48:11 · 439 阅读 · 0 评论 -
1. Dubbo原理解析-Dubbo内核实现之SPI简单介绍
Dubbo采用微内核+插件体系,使得设计优雅,扩展性强。那所谓的微内核+插件体系是如何实现的呢!大家是否熟悉spi(service providerinterface)机制,即我们定义了服务接口标准,让厂商去实现(如果不了解spi的请谷歌百度下), jdk通过ServiceLoader类实现spi机制的服务查找功能。JDK实现spi服务查找: ServiceLoader首先定义下示例接口package com.example;public interface Spi {...转载 2021-02-27 16:23:46 · 131 阅读 · 0 评论 -
Dubbo上下文信息、隐匿参数附件(六)
1、参考上下文信息:http://dubbo.apache.org/en-us/docs/user/demos/context.html隐匿参数:http://dubbo.apache.org/en-us/docs/user/demos/attachment.html我觉得这两个功能与监控、跟踪、路径分析有关。2、上下文信息Dubbo里边的上下文为RpcContext。首先RpcContext是线程级的,每个线程一份。RpcContext主要记录调用关系,当Consumer调用别转载 2021-02-25 20:41:54 · 311 阅读 · 0 评论 -
RemotingException: message can not send, because channel is closed
问题描述调用Dubbo服务报以下错误,跪求问题原因和解决办法Caused by: com.alibaba.dubbo.remoting.RemotingException: message can not send, because channel is closed . url:dubbo://192.168.17.71:21954/com.tw.ei.business.agent.service.ReqBuinessAgentService?anyhost=true&ap...转载 2021-01-25 16:36:23 · 1983 阅读 · 0 评论 -
解决: java.net.ConnectException: Connection refused: connect 【介绍较全面】
java.net.ConnectException: Connection refused: connect1. 报错如上。2. 原因和解决:1)端口号被占用:杀死占用端口号(一般为8080)的进程,释放端口;彻底关闭 Tomcat 服务器,或者重新启动项目。2)使用以下命令检查服务器中允许的最大进程数:ulimit -u。如果将此值设置为较低值,例如1024,则使用以下值将其增加到131072或无限制:ulimit -u 131072 或者ulimit -u无限制 。...转载 2021-01-25 16:03:17 · 18545 阅读 · 0 评论 -
java.net.ConnectException: Connection refused问题解决办法 【介绍较详细】
这篇文章主要介绍了java.net.ConnectException: Connection refused问题解决办法的相关资料,需要的朋友可以参考下Socket异常客户端异常 1 java.net.ConnectException: Connection refused: connect。 该异常发生在客户端进行new Socket(ip, port)操作时,该异常发生的原因是或者具有ip地址的机器不能找到(也就是说从当前机器不存在到指定ip路由.转载 2021-01-25 15:46:13 · 35292 阅读 · 0 评论 -
第一个Dubbo Filter
概述在Dubbo的整体设计中,Filter是一个很重要的概念,包括Dubbo本身的大多数功能,都是基于此扩展点实现的,在每次的调用过程中,Filter的拦截都会被执行。Dubbo Filter的加载机制Dubbo中已经实现的Filter大概有二十几个,它们的入口都是ProtocolFilterWrapper,ProtocolFilterWrapper对Protocol做了Wrapper...转载 2020-03-18 23:42:43 · 119 阅读 · 0 评论