Dubbo-主流程

dubbo的确比较复杂,模块比较多,乍一看挺头疼,关键是缺少思路类的文档,梳理起来相对费劲。

说说主线吧,实现一个rpc主线逻辑其实还蛮简单的:

1. server 端 起一个tcp server,预备将对外提供的服务初始化,接收client端的请求。

2. client  端 发起一个远程调用,通过 约定的协议,server端接收到请求,判断是否提供该服务,是则执行相应 对象.方法,然后把数据返回给客户端。

原理说清楚了,落地就会各种麻烦了,需要通用,透明。不妨抛几个主要问题出来,探讨一下,

1. server 端 提供多个服务的时候,如何将 client 端的请求,通用的方式对应到相应服务实现类上执行?

2. client 端,通常没有实现类,只有接口,那这时,如何通用?透明?的让用户写代码? 如何通用,透明的执行远程调用?

dubbo是这么做的

Server端:

1. Invoker 对象,这是对所有 服务对象的一个抽象,例如 AService,BService 都转化成 Invoker 对象,所有的方法调用,全转化为Invoker.invoke(Invocation inv)方法调用。

Invovation 包含几个关键方法 getMethodName ,getParameterType , getArguments ....等

疑问: invokerA.invoke(invocation) 如何对应到执行代码 AServce.methodA()?

每个Invoker 都持有真正的Service对象,当执行invoke时,知道了方法名,参数列表和参数值,通过反射来调用Service对象的方法

Client 端:

1. 接口是无法执行的,我们必须首先有个接口的实现类,然后调用具体某个方法,然后框架能自动帮我执行例如:建立连接,发送请求,接收响应,返回等操作。

框架怎么搞的呢?  jdk Proxy,动态生成一个 接口实现类。

时间: 2024-10-01 21:11:41

Dubbo-主流程的相关文章

Dubbo-本地测试直连

一.服务提供方 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/

由Dubbo路由引发的一言不合就看源码

由Router引入 由于业务上的需要,很早之前就想自己扩展Dubbo的路由功能.But,之前试了一下,发现好像并没有找到正确的打开方式,而且由于时间不是很充足,加上自己心浮气躁浅尝辄止,于是乎就放弃了这块的研究. 不过今日,在手头上一块比较忙的事情告一段落了之后,又开始漫漫的research之路.. 好了,下面先来说说之前被困在了什么地方. 首先吐槽一下,官方文档对于这一块的用法写得非常的不全面,只介绍了条件路由的语法,而没有告诉我们怎么样使其生效.当然最简单的一种做法,官方文档上也说了,装个d

阿里Dubbo疯狂更新,关Spring Cloud什么事?

最近,开源社区发生了一件大事,那个全国 Java 开发者使用最广的开源服务框架 Dubbo 低调重启维护,并且 3 个月连续发布了 4 个维护版本. 我上次在写放弃Dubbo,选择最流行的Spring Cloud微服务架构实践与经验总结这篇文章的时候,就有很多的网友给我留言说,Dubbo 又开始更新了.我当然是清楚的,我也一直在关注着 Dubbo 的走向,在几个月前技术圈里面就有一个消息说是 Dubbo 又开始更新了,大家议论纷纷不知真伪.我还专门跑到 GitHub 上面进行了留言询问,最后在

dubbo源码阅读-服务订阅(八)之远程订阅(dubbo)

说明 从<服务订阅主流程>可以看到根据协议来注册 我们默认没有根据url直接配置所以url是registry SPI扩展就是走的RegistryProtocol RegistryProtocol <1>refer /** * type为订阅接口 * @param type Service class * @param url URL address for the remote service * @param <T> * @return * @throws RpcEx

Dubbo

Dubbo Duboo是什么 DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点.可以看出在阿里内部广泛应用,类似的还有Spring Cloud. 准备工作 准备两虚机,我这里用了CentOS7.2,加上本机可组成多提供者和消费者(当然一个虚机和不用虚机也可以)我准备的两台IP为:192.168.124.129(用于

阿里巴巴Dubbo实现的源码分析[转]

阿里巴巴Dubbo实现的源码分 1.      Dubbo概述 Dubbo是阿里巴巴开源出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及作为SOA服务治理的方案.它的核心功能包括: #remoting:远程通讯基础,提供对多种NIO框架抽象封装,包括"同步转异步"和"请求-响应"模式的信息交换方式. #Cluster: 服务框架核心,提供基于接口方法的远程过程调用,包括多协议支持,并提供软负载均衡和容错机制的集群支持. #regist

dubbo框架----探索-大型系统架构设计(图解)

对于高并发系统的架构要求: 1. 负载均衡 2.高并发 3.高可用 4.面向服务架构 (Dubbo框架使用) 5.分布式缓存 (redis分布式缓存) 6.分布式全文检索 (solr分分布式全文检索) 7.分布式数据库集群 (mycat 集群mysql数据库) dubbo  简介 系统架构 redis 集群 solr 集群 mysql 集群

21.dubbo脚本之dump.sh

#!/bin/bash cd `dirname $0` BIN_DIR=`pwd` cd .. DEPLOY_DIR=`pwd` CONF_DIR=$DEPLOY_DIR/conf SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'` LOGS_FILE=`sed '/dubbo.log4j.file/!d;s/.*=//' conf/dubbo.properties |

22.dubbo脚本之start.sh

#!/bin/bash cd `dirname $0` BIN_DIR=`pwd` cd .. DEPLOY_DIR=`pwd` CONF_DIR=$DEPLOY_DIR/conf SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'` SERVER_PROTOCOL=`sed '/dubbo.protocol.name/!d;s/.*=//' conf/dubbo.pro

23.dubbo脚本之stop.sh

#!/bin/bash cd `dirname $0` BIN_DIR=`pwd` cd .. DEPLOY_DIR=`pwd` CONF_DIR=$DEPLOY_DIR/conf SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'` if [ -z "$SERVER_NAME" ]; then     SERVER_NAME=`hostname` fi PID