Dubbo

Dubbo 源码分析

会有一股神秘感。 提交于 2020-04-06 11:38:29
开篇 前面通过三篇文章讲述了 Dubbo SPI 的其中三种用法: Dubbo SPI 使用方法(一)- 扩展点自动包装 Dubbo SPI 使用方法(二)- 扩展点自适应 Dubbo SPI 使用方法(三)- 扩展点自动装配 本文通过 Dubbo 的一个应用案例 - 获取 Protocol 扩展实例, 来看看 Dubbo SPI 在源码中的具体应用实现. 阅读本文之前,请结合上述文章 或者 官网 Dubbo SPI , 或者其他相关文章, 对 Dubbo SPI 有一定程度的了解. 正文 通过 Dubbo 官方文档-框架设计篇 , 可以看出 Dubbo 整体被分为 十 层, 其中 Service 和 Config 层为 API,其它各层均为 SPI, 也就是说其他各层都有对应的多个扩展实现. 比如协议层 Protocol 的已知扩展: org.apache.dubbo.rpc.protocol.injvm.InjvmProtocol org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol org.apache.dubbo.rpc.protocol.rmi.RmiProtocol org.apache.dubbo.rpc.protocol.http.HttpProtocol org.apache.dubbo.rpc.protocol

源码分析Dubbo网络通信篇NettyClient

China☆狼群 提交于 2020-04-06 11:24:14
在源码分析 Dubbo 通讯篇之网络核心类一文中已给出 Dubbo netty client 的启动流程,如下图: 以 Dubbo 协议为例,DubboProtocol#refer 中,在创建 Invoker 时,通过 getClient 方法,开始 Client(连接的)创建过程,先重点看一下: private ExchangeClient[] getClients(URL url) { // @1 // whether to share connection boolean service_share_connect = false; int connections = url.getParameter(Constants.CONNECTIONS_KEY, 0); // @2 // if not configured, connection is shared, otherwise, one connection for one service if (connections == 0) { service_share_connect = true; connections = 1; } ExchangeClient[] clients = new ExchangeClient[connections]; // @3 for (int i = 0; i < clients

dubbo源码分析

╄→尐↘猪︶ㄣ 提交于 2020-04-06 09:44:21
调用过程 java SPI与dubbo SPI区别 dubbo SPI增加了IOC的机制。在实现类里面可以自动注入其他实现类。 dubbo SPI增加了APO的机制 java SPI不能获取某个指定的实现类,因为java SPI实现类是用List统计的,dubbo SPI是由Map统计的。 来源: oschina 链接: https://my.oschina.net/u/1791774/blog/3213202

第二天

一世执手 提交于 2020-04-06 09:29:47
独立工程就是打成一个war包,war包可以部署到不同的服务器中; 聚合工程至少有一个是war包,去除web后manager聚合工程剩余dao、service、pojo、interface,把service改成war包 main下加入webapp/WEB-INF/web.xml 导入移动的web文件,创建另一个maven工程 e3-mall-manager-web的pom.xml需要依赖service的接口了 controller中出出错是因为没有了spring的jar包了,因为之前是controller依赖的是service的jar包,因此表表现层需要添加spring的依赖 两个工程之间需要调用服务,要调用服务,首先要知道服务在哪里 dubble介绍: manager-web相当于客户端去调用service层这个服务端 container相当于spring 当初始化容器时候,服务就开始发布 要使用时候,都需要加入各自的jar包 dubble的用法: 单一工程用法: Dubbo采用全 Spring配置方式 ,透明化接入应用,对应用没有任何API侵入, 只需用Spring加载Dubbo的配置即可 , Dubbo基于Spring的Schema扩展进行加载 。 单一工程中spring的配置 单一工程中spring的配置 <bean id="xxxService" class="com

Dubbo SPI 使用方法(三)- 扩展点自动装配

北城余情 提交于 2020-04-06 07:43:47
开篇 前面已经讲到了: Dubbo SPI 使用方法(一)- 扩展点自动包装 Dubbo SPI 使用方法(二)- 扩展点自适应 本文来讲下 Dubbo SPI - 扩展点自动装配 , 即 Dubbo 实现的 IOC , 用一段简单代码来解释下: 当实例化 A 时, 发现 A 依赖了 B, 并且有对应的 set 注入方法, 那么 Dubbo 就会顺便把 B 也实例化, 并注入到 A 对象中. public class A { private B b; public void setB(B b) { this.b = b; } } 正文 1. 概念 上面简单的介绍了 IOC, 那么接下来看看 Dubbo SPI - 扩展点自动装配是如何做的. 引用官网的一段介绍 加载扩展点时,自动注入依赖的扩展点。 加载扩展点时,扩展点实现类的成员如果为其它扩展点类型,ExtensionLoader 在会自动注入依赖的扩展点。 ExtensionLoader 通过扫描扩展点实现类的所有 setter 方法来判定其成员。即 ExtensionLoader 会执行扩展点的拼装操作。 2. 使用 2.1 定义扩展接口 interface ServiceA { void sayA(); } 2.2 定义扩展接口实现类 // 实现类 public class ServiceAImpl implements

Dubbo源码解读 —— Dubbo扩展点加载机制

放肆的年华 提交于 2020-04-06 06:31:44
Dubbo源码解读 —— Dubbo扩展点加载机制 Dubbo源码解读 —— Dubbo扩展点加载机制 1、SPI介绍 2、Java SPI 实现 3、Dubbo Spi 实现 4、Dubbo 中扩展核心类源码解析 5、记录的知识点 1、SPI介绍 SPI : Service Provider Interface,种服务发现机制。 本质是将接口实现类的全路径名配置在文件中,由服务加载器读取配置文件,加载实现类。 可以在运行时,动态为接口替换实现类。 可以很容易的通过 SPI 机制为我们的程序提供拓展功能。 SPI 机制在第三方框架中也有所应用。 2、Java SPI 实现 定义一个接口及对应的方法 public interface IJavaSpiService { Object say(String param); } 实现接口定义的方法 public class JavaSpiServiceImpl implements IJavaSpiService { @Override public Object say(String param) { System.out.println("java spi impl "+param); return "java spi impl"; } } public class Java1SpiServiceImpl implements

记一次面试总结

断了今生、忘了曾经 提交于 2020-04-06 05:58:56
  疫情在家有些闲,发现自己的简历有1年半没更新过了,上一次面试还是1年半以前。想看看外面的行情也顺便摸一下自己的底,把自己的方向理清晰一些,就更新了自己的简历,公开出去了。公开的第二天收到了一些面试推荐。虽然在家,但是白天还是在远程办公,所以也没有面试很多,选了其中两家。一个是阿里CBU技术部-C2M-java方向岗位(终止第三轮技术面),还有一个是斗鱼java后台(拿到offer,考虑到时外包直接否掉了)。总结一下这次面试过程,以及自己的不足与后期的方向。   面试感受的话,阿里给我的面试总体感觉是非常舒服,专业,都是中午打电话预约下一轮面试时间,每一轮面试在1个小时到2个半小时之间。每一轮面试官问了什么问题,面试者回答结果都有记录。所以后面的面试官都会看到前面面试官问了哪些内容,面试者回答的情况,多轮面试技术都不会重叠,技术广度覆盖比较全.记录一下面试内容:   一面主要聊了2个半小时吧,聊了快两个小时,做题做了半个多小时   1.项目中对quartz的使用以及分布式调度任务的实现过程/方式。   2.redis相关。作为分布式锁实现原理,调用的哪个命令,以及项目中使用的业务场景。作为缓存使用场景,cluster模式是如何实现的;主从数据同步过程,持久化方式,数据过期处理方式,cluster模式下某实例节点挂了,客户端是否感知,是否有数据问题;一致性hash原理

RPC框架实现(一) Protobuf的rpc实现

梦想与她 提交于 2020-04-06 03:58:22
概述 RPC框架是云端服务基础框架之一,负责云端服务模块之间的项目调用,类似于本地的函数调用一样方便。常见的RPC框架配带的功能有: 编解码协议。比如protobuf、thrift等等。 服务发现。指服务提供者更新接口后,服务使用者如何知道该接口更新。Protobuf协议使用的是预编译方式,dubbo中使用的是zk作为媒介。 负载均衡。 流量控制、熔断。 运维工具。 常见RPC框架有 谷歌的GRPC。 百度的BRPC。 阿里的dubbo。 脸书的thrift。 腾讯的tars。 本系列主要教大家如何实现RPC框架,使用的语音是C++,协议使用的是protobuf。 基于protobuf的RPC框架 这里不介绍具体protoc的使用方法,网上很多。在完成protoc编译后,会输出protobuf提供的服务框架中,主要有如下几个类 Controller,主要是rpc通信过程的辅助接口,记录错误状态和简单的控制。 Service,指特定的一个服务。在protobuf中,一个服务(service)可以包含多个方法(method),通过service+method可以唯一确定一个过程。 Channel,指使用者和提供者直接的连接通道,是protobuf的核心,但是rpc框架开发者一般不直接调用该类,而是调用下面的stub(桩/存根)。 Stub,客户端使用的存根,通过该类去发起远程过程调用

缘起 Dubbo ,讲讲 Spring XML Schema 扩展机制

情到浓时终转凉″ 提交于 2020-04-06 03:42:48
背景 在 Dubbo 中,可以使用 XML 配置相关信息,也可以用来引入服务或者导出服务。配置完成,启动工程,Spring 会读取配置文件,生成注入 相关 Bean。那 Dubbo 如何实现自定义 XML 被 Spring 加载读取? Spring XML Schema 扩展机制。从 Spring 2.0 开始,Spring 开始提供了一种基于 XML Schema 格式扩展机制,用于定义和配置 bean。 Spring XML Schema 扩展机制 实现 Spring XML Schema 扩展,其实非常简单,只需要完成下面四步。 创建 XML Schema 文件,由于该文件后缀名为 xsd,下面称为 XSD 文件。 编写实现一个或多个 BeanDefinitionParser 。 编写 NamespaceHandler 实现类。 注册 NamespaceHandler 以及 XSD 文件。 我们按照以上步骤,最终完整 Spring 解析如下配置。 <?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:demo=

微服务架构Dubbo之注册中心(Zookeeper)

不打扰是莪最后的温柔 提交于 2020-04-06 02:01:57
注册中心简介 在微服务架构中,注册中心是核心的基础服务之一。在微服务架构流行之前,注册中心就已经开始出现在分布式架构的系统中。Dubbo是一个在国内比较流行的分布式框架,被大量的中小型互联网公司所采用,Dubbo是一个非常实用的框架,提供了比较完善的服务治理功能,而服务治理的实现主要依靠的就是注册中心。 Dubbo官网架构图 在Dubbo架构图中,可以看到注册中心(Registry)位于顶端,所有的服务治理相关的操作都围绕它进行。服务提供者(Provider)注册到注册中心,服务消费者(Comsumer)到注册中心订阅,同时,注册中心中的变更也会通知服务消费者。 注册中心的调用过程 服务提供者启动时,会将自己的服务信息(服务名称/IP地址/端口号等)写入注册中心。 当注册中心接收提供者数据时,会动态的维护服务列表数据。 当消费者启动时,首先会链接注册中心.获取服务列表数据。 当注册中心接收到消费者的请求之后,先将消费者的信息进行记录. 将服务列表信息发给消费者。 当消费者接收注册中心发来的数据之后,将数据保存到消费者本地.至此消费者启动完成. 等待用户的调用。 当消费者接收调用时,则根据服务列表数据找到可以提供服务的提供者,之后利用负载均衡算法,挑选其中一个进行访问。 注册中都有心跳检测机制. 当服务器发生宕机现象时,注册中心会动态的维护服务列表数据.同时全网广播