秒扒Dubbo
Dubbo的学习分享
崔世勋
这个作者很懒,什么都没留下…
展开
-
dubbo学习-1-服务提供者&服务消费者&依赖
远程服务(Spring配置) 将服务定义部分放在服务提供方remote-provider.xml,将服务引用部分放在服务消费方remote-consumer.xml。 并在提供方增加暴露服务配置<dubbo:service>,在消费方增加引用服务配置<dubbo:reference>remote-provider.xml<bean id=“xxxSer...转载 2016-12-15 17:46:37 · 1345 阅读 · 0 评论 -
dubbo学习-2-配置
<dubbo:service />服务配置,用于暴露一个服务,定义服务的信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心。<dubbo:reference/>引用配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心。<dubbo:protocol/>协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受...转载 2016-12-30 17:02:48 · 1023 阅读 · 0 评论 -
dubbo学习三--集群,线程模型
集群容错在集群调用失败时,dubbo提供了多种容错方案,缺省为failover重试。 (1)这里的invoker是provider的一个可调用service的抽象,invoker封装了provider地址及service 接口信息。(2)Directory代表多个invoker,可以把它看成List<Invoker>,但与List不同的是,它的值可能是动态变化的,比...转载 2017-01-03 09:25:34 · 1256 阅读 · 0 评论 -
dubbo学习四--连接方式
直连提供者在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时可能需要点对点直连。(1)如果是线上需求需要点对点,可在<dubbo:reference>中配置url指向提供者,将绕过注册中心,多个地址用分号隔开。(2)在JVM启动参数中加入-D参数映射服务地址(key为服务名,value为服务提供者url,此配置优先级最高)(3)发果服务比较多,也可以用...转载 2017-01-03 10:06:05 · 1270 阅读 · 0 评论 -
dubbo学习五--服务分组,多版本,参数验证,结果缓存
服务分组当一个接口有多种实现时,可以用group区分 <dubbo:service group="feedback" interface="com.xxx.IndexService" /><dubbo:service group="member" interface="com.xxx.IndexService" /><dubbo:refere转载 2017-01-03 10:29:43 · 4223 阅读 · 0 评论 -
dubbo学习六--泛化,回声测试,上下文信息,隐式传参,异步调用,本地调用
泛化引用 <dubbo:reference id="barService" interface="com.foo.BarService" generic="true" /> GenericService barService = (GenericService) applicationContext.getBean("barService");...转载 2017-01-03 11:18:54 · 6670 阅读 · 0 评论 -
dubbo学习七--参数回调,本地存根,延迟暴露,并发控制
参数回调参数回调方式与调用本地callback或Listener相同,只需要在Spring的配置文件中声明哪个参数是callback类型即可,dubbo将基于长连接生成反向代理,这样就可以从服务器端调用客户端逻辑。 (1)共享服务接口 服务接口示例:CallbackService.java package com.callback; publi...转载 2017-01-03 13:43:44 · 2910 阅读 · 0 评论 -
dubbo学习八--延迟连接,粘滞连接,令牌验证,路由规则
延迟连接用于减少长连接数,当有调用发起时,再创建长连接。只对使用长连接的dubbo协议生效。<dubbo:protocolname="dubbo"lazy="true"/>粘滞连接粘滞连接用于状态服务,尽可能让客户端总是同一提供者发起调用,除非该提供者挂了,再连另一台。粘滞连接将自动开启延迟连接,以减少长连接数。<dubbo:protocolname="d...转载 2017-01-05 14:11:00 · 3492 阅读 · 0 评论 -
dubbo学习九--服务降级,优雅停机,日志
向注册中心写入动态配置覆盖规则:(通过由监控中心或治理中心的页面完成) RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension(); Registry registry = registryFactory....转载 2017-01-05 15:02:48 · 4834 阅读 · 0 评论 -
dubbo SPI机制
参考:http://www.cnblogs.com/heart-king/p/5632524.htmlSPI是什么SPI是为某个接口寻找服务实现的机制。为实现在模块装配的时候不在程序里动态指明,这就需要一种服务发现机制。 原理java spi和所有实现接口的厂商有一个俗称的约定,只要将META-INF/services文件夹下生成一个和抽象类全名称相同的配置文件,那么厂商的ja...转载 2017-01-06 16:10:22 · 959 阅读 · 0 评论 -
dubbo spi extensionloader 插件化
SPISPI只是一种协议,它只是规定在META-INF目录下提供接口的实现描述文件,由框架本身定义接口、规范,第三方只需要将自己实现在META-INF下描述清楚,那么框架就会自动加载你的实现。比如Dubbo的规则是在META-INF/dubbo、META-INF/dubbo/internal或者META-INF/services下面以需要实现的接口全面去创建一个文件,并且在文件中以proper...转载 2017-02-24 10:11:27 · 1001 阅读 · 0 评论 -
dubbo rpc 调用过程解析
RPC调用在客户端(Consumer)触发,基配置文件中会有如下的定义: <dubbo:reference id="xxxService" interface="xxx.xxx.Service" />这一行定义会为服务接口xxx.xxx.Service在本地生成一个远程代理,在Dubbo中这个代理用com.alibaba.dubbo.common.bytecode.pr...转载 2017-02-27 15:22:26 · 7912 阅读 · 0 评论 -
dubbo 自定义标签
dubbo扩展了spring自定义标签,所有的<dubbo:>配置标签最后都会转化成一个Spring-bean。在META-INF路径下有三个配置文件:(1)spring.schemas作用是为方便spring找到dubbo.xsd,因为约束文件默认是到网络上搜索的,有了这个配置文件就可以将网络搜索重定向到本地,这个重定向工作是由Spring自动完成的。(2)dubbo...转载 2017-02-27 16:23:39 · 651 阅读 · 0 评论 -
dubbo - 生产者发布服务
指定注册中心的地址和端口号,基于dubbo协议。发布DemoService服务,服务的实现为DemoServiceImpl。每个在spring内部都会生成一个ServiceBean实例,ServiceBean的实例化过程中调用export方法来暴露暴露服务。protected List loadRegistries(boolean provider) { checkRegi转载 2017-02-28 09:08:38 · 727 阅读 · 0 评论 -
dubbo 服务提供者 心跳机制
zk有一种znode类型ephemeral,这种类型的节点的特征就是生命和session一样长,服务提供者向注册中心就会创建ephemeral类型的znode,同时通过心跳保持会话。 最后欢迎大家访问我的个人网站:1024s...转载 2017-03-10 16:46:12 · 3525 阅读 · 0 评论 -
dubbo 配置
先要了解Spring解析自定义标签。 DubboBeanDefinitionParser它实现了Spring的BeanDefinitionParser接口,该接口专门用来解析Bean的定义,所以需要实现parser()方法。public BeanDefinition parse(Element element, ParserContext parserContext)DubboBea...转载 2017-03-10 18:12:02 · 435 阅读 · 0 评论 -
dubbo 协议
dubbo://Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器远大于服务提供者机器数的情况。设置默认协议:<dubbo:provider protocol="dubbo"/>为服务设置协议:<dubbo:service protocol="dubbo"/> 多端口:<dubbo:pr...转载 2017-03-13 11:12:22 · 557 阅读 · 0 评论 -
dubbo 并发控制 和 连接控制
并发控制(1)服务端并发执行(或占用线程池线程数)不能超过10个。<dubbo:service interface="com.foo.BarService" executes="10" />(2)限制到方法<dubbo:service interface="com.foo.BarService"><dubbo:method name="sayH.转载 2017-03-14 11:26:19 · 6403 阅读 · 1 评论 -
dubbo 日志
在dubbo框架内所有的日志输出都是通过LoggerFactory这个静态工厂类来获得Logger的对象实体,并且使用一个LoggerAdapter用于对接第三方日志框架,所以就有了JDKLoggerAdapter, Log4jLoggerAdapter,SLF4JLoggerAdapter等一些实现子类。在未配置指定的logger提供方的情况下,dubbo选择的优先级如下:Log4j->...转载 2017-03-16 13:16:33 · 987 阅读 · 0 评论 -
dubbo 启动 java.net.unkownhostexception : bogon:bogon :Name or service not known
Caused by: java.lang.RuntimeException: get localhost fail at com.alibaba.rocketmq.common.MixAll.localhost(MixAll.java:458) at com.alibaba.rocketmq.common.MixAll.<clinit>(Mix...转载 2017-03-16 14:35:23 · 2989 阅读 · 0 评论 -
dubbo 路由分析
核心类ReferenceConfig为了弄清楚,先从Consumer入手,Dubbo会代理我们在Consumer中引用的接口,一般都用<dubbo:reference />来配置,具体的逻辑在ReferenConfig中 private T createProxy(Map<String, String> map) { // 通过注册中心配置拼装...转载 2017-03-21 14:19:04 · 2567 阅读 · 0 评论 -
DUBBO 泛化调用
什么是泛化调用?说白一点就是服务消费者并没有服务的接口。 先定义一个简单的接口 public interface EasyCommonService { public String helloService(String name); } 接口的具体实现 public class EasyCommonServiceI...转载 2017-05-11 17:34:24 · 825 阅读 · 0 评论 -
dubbo学习 总结
总体上分成Business层、RPC层、Remoting层。(1)Business层是写的业务逻辑的接口和实现类。(2)RPC层 config配置层,使用这一层提供的@注解,xml配置等方法来暴露写好的接口实现类为服务 和 生成远程服务代理类。 proxy服务代理层,服务接口透明代理,可以像调本地一样调远程服务。 registry注册中心层,完成服务地址的注册与发现。 c...转载 2017-05-24 11:22:06 · 531 阅读 · 0 评论 -
dubbo中的mock实现机制
Mock是SOA之中的一个很有用的功能,不仅可以用来进行服务降级,也可以用来在测试中模拟服务调用的各种异常情况。dubbo框架里面的mock是在服务使用者这一端实现的,下面对实现机制进行分析:1. Mock的植入很显然,既然提供了mock机制,那么mock应该作为一个环节插入到服务使用者的整个处理流程之中,而dubbo的设计基本采用了装饰器模式,一层一层的进行包装,这个具体的植入点就在Re...转载 2017-06-07 20:41:41 · 6302 阅读 · 0 评论 -
dubbo 线程池
netty的线程模型在netty中存在两种线程,boss线程和worker线程。1.boss线程作用: (1)accept客户端的连接 (2)将接收到连接注册到一个worker线程上。个数: 通常情况下,服务端每绑定一个端口,开启一个boss线程。2.worker线程作用: 处理注册在其身上的连接connection上的各种io事件。个数:...转载 2017-06-19 17:24:32 · 1930 阅读 · 3 评论 -
dubbox -- 服务的启动与初始化
步骤 调用顺序 备注 容器启动 com.alibaba.dubbo.container.Main.main(args); dubbo.properties->dubbo.container->container.start() container->spring, log4j, jetty... SpringContai...转载 2017-06-30 13:55:44 · 1283 阅读 · 0 评论 -
dubbo 远程服务调用流程
消费端触发请求。 消费端请求编码。 提供端请求解码。 提供端处理请求。 提供端响应结果编码。 消费端响应结果解码。消费端触发请求在消费者初始化的时候,会生成一个消费者代理注册到容器中,该代理回调中持有一个MockClusterInvoker实例,消费调用服务接口时它的invoke会被调用,此时会构建一个RpcInvocation对象,把服务接口的method对象和参数放到RpcIn...转载 2017-07-03 17:35:53 · 2730 阅读 · 0 评论 -
dubbo插件机制
可以通过在classpath的META-INF/dubbo/internal/、META-INF/dubbo/、META-INF/services/目录下放置文件来定义扩展点,文件名称为组件接口的类全名,文件内容为扩展名=实现类名的形式,例如:Protocol的扩展点文件(文件名称com.alibaba.dubbo.rpc.Protocol)框架通过ExtensionLoader负责加载/...转载 2017-07-04 09:16:22 · 697 阅读 · 0 评论 -
dubbo 标签解析
Spring框架提供了两个接口:NamespaceHandler负责namespace处理和BeanDefinitionParser负责bean的解析。使用者可以实现NamespaceHandler接口,然后可以在classpath(包括class文件路径和jar包中的路径)的META-INF目录下编写一个spring.handlers文件,该文件中定义名称空间URL和名称空间处理器类的映射,...转载 2017-07-04 09:29:24 · 498 阅读 · 0 评论 -
dubbo 服务提供者初始
dubbo服务提供者由dubbo:service来定义,从前面可以看到,spring把dubbo:service解析成一个ServiceBean,ServiceBean实现了ApplicationListener和InitializingBean接口,ServiceBean有个核心方法export,在这个方法中初始化服务提供者并且暴露远程服务。这个方法在bean初始化或容器中所有bean刷新完毕时...转载 2017-07-04 13:52:16 · 767 阅读 · 0 评论 -
dubbo 服务消费者初始化
dubbo:reference解析成一个ReferenceBean,它是一个FactoryBean,消费者的初始化在它的init方法中执行,这个方法在两种情况下会被调用:(1)消费者设置了立即初始(init属性设置成true),那么bean加载时会立即调用消费者初始化。(2)消费者bean被使用者调用时,调用getObject->get->init。消费者初始化是主要做的事...转载 2017-07-04 15:23:20 · 1862 阅读 · 0 评论 -
dubbox rest学习
dubbo支持多种远程调用方式,例如:dubbo RPC(二进制序列化+tcp协议)、http调用 (二进制序列化+http协议)、hessian(二进制序列化+http协议)、webService(文本序列化+http协议)。 快速入门:在dubbo中开发一个REST风格的服务会比较简单,下面以一个注册用户的简单服务为例说明。这个服务要实现的功能是提供如下URL:http:/...转载 2017-07-26 17:29:24 · 1241 阅读 · 0 评论 -
dubbo 一致性hash
一致性Hash负载均衡涉及到两个主要的配置参数为hash.arguments与hash.nodes。 hash.arguments:当进行调用时候根据调用方法的哪几个参数生成key,并根据key来通过致性hash算法来选择调用结点。 hash.nodes:为结点的副本数。缺省只对第一个参数Hash,如果要修改,请配置<dubbo:parameter key="hash.arg...转载 2017-08-02 14:07:26 · 2098 阅读 · 0 评论 -
dubbo 粘滞连接 源代码分析
protected Invoker<T> select(LoadBalance loadbalance, Invocation invocation, List<Invoker<T>> invokers, List<Invoker<T>> selected) throws RpcException { if (i...转载 2017-08-02 15:50:39 · 803 阅读 · 0 评论 -
Dubbo异步方法调用里的问题
场景描述:客户端远程异步调用ServiceA,ServiceA在处理客户端请求的过程中需要远程同步调用ServiceB,ServiceA从ServiceB的响应中取数据时,得到的是null,对就是这个坑。使用DEBUG模式,分析Dubbo源码得到问题的起因。分析过程如下:客户端和服务端通信,配置使用netty进行网络传输,通过NettyHandler进行具体的消息收发操作,所以从此入手进...转载 2017-08-03 09:43:14 · 630 阅读 · 0 评论 -
dubbo异步调用
dubbo的rpc服务如果使用的是长连接的协议,如dubbo协议,tcp长连接本身是双向异步的,dubbo内部通过监听返回结果,来实现方法调用的同步,所以性能上是有牺牲的。 例子:consumer.xmls <beanid="demoCallback"class="com.alibaba.dubbo.callback.implicit.NofifyImpl"/>...转载 2017-08-03 10:57:24 · 1085 阅读 · 0 评论 -
Dubbo序列化
在Dubbo RPC中,同时支持多种序列化方式:(1)dubbo序列化,阿里尚不成熟的java序列化实现。(2)hessian2序列化:hessian是一种跨语言的高效二进制的序列化方式,但这里实际不是原生的hessian2序列化,而是阿里修改过的hessian lite,它是dubbo RPC默认启用的序列化方式。(3)json序列化:目前有两种实现,一种是采用的阿里的fastjso...转载 2017-08-03 13:42:48 · 7055 阅读 · 1 评论 -
dubbo 令牌验证 源码分析
在ServiceConfig.java中在doExportUrlsFor1Protocol中: if (! ConfigUtils.isEmpty(token)) {//如果配置令牌功能 if (ConfigUtils.isDefault(token)) { map.put("token", UUID.randomU...原创 2017-08-03 16:25:13 · 2654 阅读 · 0 评论 -
dubbo常用标签
1、<dubbo:service /> 用于服务生产者暴露服务配置属 性 类 型 是否必填 缺省值 描 述 interface class 必填 无 服务接口全路径 ref object 必填 无 服务对象实现引用 version string 可选 0.0.0...转载 2017-08-04 11:02:13 · 762 阅读 · 0 评论 -
dubbo 多版本部分源码分析
提供端分析服务提供者在起动时,会执行到DubboProtocol.export,生成DubboExporter对象,并放入exportMap中。public <T> Exporter<T> export(Invoker<T> invoker) throws RpcException { URL url = invoker.getUrl(...原创 2017-08-04 16:44:05 · 1248 阅读 · 0 评论