dubbo
文章平均质量分 87
chuixue24
这个作者很懒,什么都没留下…
展开
-
dubbo系列7:Dubbo服务调⽤源码解析
服务消费端执⾏逻辑 1. MockClusterInvoker.invoke(new RpcInvocation(method, args)):Mock逻辑2. AbstractClusterInvoker.invoke(invocation):把RpcContext中设置的Attachments添加到invocation对象上,调⽤路由链从服务⽬录上筛选出适合的服务Invoker,获得服务均衡策略loadbalance3. FailoverClusterInvok...原创 2022-01-04 14:08:32 · 711 阅读 · 0 评论 -
dubbo系列三:Dubbo的可扩展机制SPI源码解析
Dubbo SPI 架构图Demo ExtensionLoader<Protocol> extensionLoader = ExtensionLoader.getExtensionLoader(Protocol.class);Protocol http = extensionLoader.getExtension("dubbo");System.out.println(http);上⾯这个Demo就是Dubbo常⻅的写法,表示获取"dubbo"对应的Protocol扩展点。原创 2022-01-04 13:57:40 · 499 阅读 · 0 评论 -
dubbo系列二:Dubbo的基本应⽤与⾼级应⽤
负载均衡 官⽹地址:http://dubbo.apache.org/zh/docs/v2.7/user/examples/loadbalance/ 如果在消费端和服务端都配置了负载均衡策略,以消费端为准。 这其中⽐较难理解的就是最少活跃调⽤数是如何进⾏统计的? 讲道理,最少活跃数应该是在服务提供者端进⾏统计的,服务提供者统计有多少个请求正在执⾏中。 但在Dubbo中,就是不讲道理,它是在消费端进⾏统计的,为什么能在消费端进⾏统计? 逻辑是这样的: 1. 消费者会缓存所调⽤服务的所原创 2021-12-28 13:47:04 · 1026 阅读 · 0 评论 -
dubbo系列一:什么是RPC
维基百科是这么定义RPC的: 在分布式计算,远程过程调⽤(英语:Remote Procedure Call,缩写为 RPC)是⼀个计算机通信协议。该协议允许运⾏于⼀台计算机的程序调⽤另⼀个地址空间(通常为⼀个开放⽹络的⼀台计算机)的⼦程序,⽽程序员就像调⽤本地程序⼀样,⽆需额外地为这个交互作⽤编程(⽆需关注细节)。RPC是⼀种服务器-客户端(Client/Server)模式,经典实现是⼀个通过发送请求-接受回应进⾏信息交互的系统。 如果涉及的软件采⽤⾯向对象编程,那么远程过程调⽤亦可称作远程调原创 2021-12-28 13:27:17 · 2266 阅读 · 0 评论 -
dubbo系列六:Dubbo服务引⼊源码解析
当Spring启动过程中,会去给@Reference注解标注了的属性去进⾏赋值,赋值的对象为ReferenceBean中get()⽅法所返回的对象,这个对象是⼀个代理对象。对于ReferenceBean,它表示应⽤想要引⼊的服务的信息,在执⾏get()时会做如下⼏步: 1. 调⽤checkAndUpdateSubConfigs(),检查和更新参数,和服务提供者类似,把ReferenceBean⾥的属性的值更新为优先级最⾼的参数值 2. 调⽤init()去⽣成代理对象ref,get()原创 2021-12-27 13:54:58 · 332 阅读 · 0 评论 -
dubbo系列五:Dubbo服务导出源码解析
服务导出的⼊⼝⽅法为ServiceBean.export(),此⽅法会调⽤ServiceConfig.export()⽅法,进⾏真正的服务导出。 服务导出⼤概原理服务导出的⼊⼝为ServiceBean中的export()⽅法,当Spring启动完之后,通过接收Spring的 ContextRefreshedEvent事件来触发export()⽅法的执⾏。 ⼀个ServiceBean对象就表示⼀个Dubbo服务,ServiceBean对象中的参数就表示服务的参数,⽐如timeout,原创 2021-12-27 13:16:39 · 1001 阅读 · 0 评论 -
dubbo系列四:Spring与Dubbo整合原理与源码分析
整体架构和流程应⽤启动类与配置 public class Application { public static void main(String[] args) throws Exception { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ProviderConfiguration.class); context.start(); System.in.rea原创 2021-12-24 14:40:50 · 1131 阅读 · 0 评论 -
Dubbo原理和源码解析之“微内核+插件”机制
github新增仓库 "dubbo-read"(点此查看),集合所有《Dubbo原理和源码解析》系列文章,后续将继续补充该系列,同时将针对Dubbo所做的功能扩展也进行分享。不定期更新,欢迎Follow。1 框架设计在官方《Dubbo 开发指南》框架设计部分提到,Dubbo 服务框架的基本设计原则是:采用 URL 作为配置信息的统一格式,所有扩展点都通过传递 URL 携带配置信息; 采用 Microkernel + Plugin 模式,Microkernel 只负责组装 Plugin..转载 2020-12-11 17:22:32 · 349 阅读 · 0 评论 -
Dubbo原理和源码解析之服务引用
github新增仓库 "dubbo-read"(点此查看),集合所有《Dubbo原理和源码解析》系列文章,后续将继续补充该系列,同时将针对Dubbo所做的功能扩展也进行分享。不定期更新,欢迎Follow。一、框架设计在官方《Dubbo 开发指南》框架设计部分,给出了引用服务时序图:另外,在官方《Dubbo 用户指南》集群容错部分,给出了服务引用的各功能组件关系图:本文将根据以上两张图,分析服务引用的实现原理,并进行详细的代码跟踪与解析。二、原理和源码解析2.1 ...转载 2020-12-11 16:51:14 · 609 阅读 · 1 评论 -
Dubbo原理和源码解析之服务暴露
github新增仓库 "dubbo-read"(点此查看),集合所有《Dubbo原理和源码解析》系列文章,后续将继续补充该系列,同时将针对Dubbo所做的功能扩展也进行分享。不定期更新,欢迎Follow。一、框架设计在官方《Dubbo 用户指南》架构部分,给出了服务调用的整体架构和流程:另外,在官方《Dubbo 开发指南》框架设计部分,给出了整体设计:以及暴露服务时序图:本文将根据以上几张图,分析服务暴露的实现原理,并进行详细的代码跟踪与解析。二、原...转载 2020-12-11 16:03:28 · 186 阅读 · 0 评论 -
Dubbo原理和源码解析之标签解析
github新增仓库 "dubbo-read"(点此查看),集合所有《Dubbo原理和源码解析》系列文章,后续将继续补充该系列,同时将针对Dubbo所做的功能扩展也进行分享。不定期更新,欢迎Follow。一、Dubbo 配置方式Dubbo 支持多种配置方式:XML 配置:基于 Spring 的 Schema 和 XML 扩展机制实现 属性配置:加载 classpath 根目录下的 dubbo.properties API 配置:通过硬编码方式配置(不推荐使用) 注解配置:通过注解..转载 2020-12-11 15:52:27 · 103 阅读 · 0 评论 -
Dubbo暴露服务流程
DubboBeanDefinitionParser.parse()---->ServiceBean.onApplicationEvent()---->ServiceBean.export()---->ServiceConfig.export()---->ServiceConfig.doExport()---->ServiceConfig.doExportUrls()---->ServiceConfig.doExportUrlsFor1Protocol()---->S原创 2020-12-11 15:46:50 · 104 阅读 · 0 评论 -
dubbo服务端线程池耗尽Server side threadpool is exhausted
在dubbo服务化时,有时会遇到这样的异常信息:Caused by: com.alibaba.dubbo.remoting.RemotingException: Server side(192.168.202.56,20880) threadpool is exhausted ,detail msg:Thread pool is EXHAUSTED! Thread Name: DubboServerHandler-192.168.202.56:20880, Pool Size: 200 (active原创 2020-09-21 14:05:42 · 3261 阅读 · 0 评论 -
Dubbo性能调优涉及参数
本文是针对 Dubbo 协议调用的调优指导,详细说明常用调优参数的作用域及源码。Dubbo调用模型常用性能调优参数 参数名 作用范围 默认值 说明 备注 threads provider 200 业务处理线程池大小 iothreads pro..转载 2020-09-21 10:56:25 · 549 阅读 · 0 评论 -
dubbo之单一长连接含义
在一个dubbo的Provider应用和Consumer应用之间有多少长连接存在?默认情况下,不配置connections参数时,默认是一个。如果在每一个consumer上配置了10,长连接个数为10*consumer个数。connections参数不填,则为0,表示用共享连接。...原创 2020-08-27 13:31:42 · 1059 阅读 · 0 评论 -
Dubbo源码解析之consumer关联provider
阅读须知dubbo版本:2.6.0 spring版本:4.3.8 文章中使用/* */注释的方法会做深入分析正文我们知道,dubbo的生产者和消费者的关系维护在注册中心,所以,消费者关联生产者肯定是需要订阅注册中心的相关生产者信息才能完成,在Dubbo源码解析之registry注册中心这篇文章中我们分析了dubbo有关注册中心的一些操作如注册、订阅等,在文章的最后,我们分析了消费者订阅注册中心的configuration、routers、providers等信息的流程,在处理provider信转载 2020-08-27 13:03:01 · 411 阅读 · 0 评论 -
《Dubbo进阶二》——RPC协议之网络传输原理
一 RPC协议的网络传输一个RPC协议又通信模块、报文编码和序列化三个模块组成,其中通信模块实现了RPC的网络传输。网络传输的稳定性和性能直接影响RPC服务的稳定性和性能。网络传输框架组成io模型 (1)BIO:同步阻塞 (2)NIO:同步非阻塞(Netty) (3)AIO:异步非阻塞 连接方式 (1)长连接(Netty) (2)短链接 线程分类(每个线程都有配有线程池) (1)IO线程 (2)服务端业务线程 (3)客户端调度线程 (4)客户端结果exchange线程 (5转载 2020-08-27 12:50:27 · 330 阅读 · 0 评论 -
dubbo协议下的单一长连接与多线程并发如何协同工作
在dubbo中描述消费者和提供者之间采用的是单一长连接,那么如果消费者端是高并发多线程模型的web应用,单一长连接如何解决多线程并发请求问题呢?其实如果不太了解socket或者多线程编程的相关知识,不太容易理解这个问题。传统的最简单的RPC方式,应该是为每次远程调用请求创建一个对应的线程,我们先不说这种方式的缺点。至少优点很明显,就是简单。简单体现在哪儿?通信双方一对一(相比NIO来说)。通俗点来说,socket通信的双方发送和接受数据不会被其它(线程)干扰,这种干扰不同于数数据包的“粘包问题转载 2020-08-26 12:58:52 · 889 阅读 · 0 评论 -
Dubbo超时重试导致的数据重复插入
以下是一个新增服务:public void saveDept(DeptVO vo) { deptService.saveDept(BeanCopierUtil.copy(vo,DeptModel::new,DeptModel.class)); try { Thread.sleep(15*1000); } catch (InterruptedException e) { // TODO Auto-gener.原创 2020-08-06 13:38:44 · 538 阅读 · 0 评论 -
dubbo中的LRU缓存
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You u.原创 2020-07-28 15:43:32 · 349 阅读 · 0 评论 -
dubbo端口冲突解决办法
在一台机子上部署多个dubbo服务,将各服务的dubbo端口号设为-1,可以确保无端口冲突。原创 2020-07-08 16:46:32 · 2386 阅读 · 0 评论 -
2. Dubbo原理解析-Dubbo内核实现之基于SPI思想Dubbo内核实现
SPI接口定义定义了@SPI注解public @interface SPI { Stringvalue() default ""; //指定默认的扩展点} 只有在接口打了@SPI注解的接口类才会去查找扩展点实现会依次从这几个文件中读取扩展点META-INF/dubbo/internal/ //dubbo内部实现的各种扩展都放在了这个目录了META-INF/dubbo/META-IN...转载 2018-06-25 17:31:30 · 197 阅读 · 0 评论 -
1. Dubbo原理解析-Dubbo内核实现之SPI简单介绍
Dubbo采用微内核+插件体系,使得设计优雅,扩展性强。那所谓的微内核+插件体系是如何实现的呢!大家是否熟悉spi(service providerinterface)机制,即我们定义了服务接口标准,让厂商去实现(如果不了解spi的请谷歌百度下), jdk通过ServiceLoader类实现spi机制的服务查找功能。 JDK实现spi服务查找: ServiceLoader首先定义下示例接口pack...转载 2018-06-25 17:29:36 · 131 阅读 · 0 评论