在Dubbo整体架构分析中介绍了Dubbo中除了Service和Config层为API外,其他各层均为SPI,为SPI意味着下面各层都是组件化可以被替换的,也就是扩展性比较强,这也是Dubbo比较好的一点. JDK中标准SPI原理 Dubbo增强的SPI功能是从JDK标准SPI演化而来的,所以有必要先讲讲标准SPI的原理. JDK中的SPI(Service Provider Interface)是面向接口编程的,服务规则提供者会在JRE的核心API里面提供服务访问接口,而具体实现则由其他开发商提…
Dubbo源码下载与编译 本文来讲下如何在Dubbo源码编译后,得到用于搭建管理控制台的war包和监控平台的jar包. 首先需要到Github上下载Dubbo的源码,解压后如下: 在dubbo-2.5.x目录执行 mvn clean package -Dmaven.test.skip=true 会生成如下结果: [INFO] ------------------------------------------------------------------------ [INFO] Reacto…
Demo结构介绍 Demo使用Maven聚合功能,里面有三个模块,目录如下: 其中Consumer模块为服务消费者,里面TestConsumer和consumer.xml组成了基于Spring配置方式的服务调用,TestConsumerApi是基于Dubbo API方式的服务调用,TestConsumerApiGeneric是泛化方式的服务调用,TestConsumerAsync是异步调用的方式. 其中Provider模块为服务提供者,里面TestProvider和provider.xml组成了…
Dubbo的分层架构 本文将简单介绍Dubbo的分层架构设计,如下图是Dubbo官方的整体架构图: Dubbo官方提供的该架构图很复杂,一开始我们没必要深入细节,下面我们简单介绍下其中的主要模块. 其中Service和Config层为API,对于服务提供方来说,使用ServiceConfig API来代表一个要发布的服务配置对象,对于服务消费方来说,ReferenceConfig代表了一个要消费的服务的配置对象.可以直接初始化配置类,也可以通过Spring解析配置自动生成配置类. 其他各层均为S…
指定方法异步调用 前面我们讲解了通过设置ReferenceConfig的setAsync()方法来让整个接口里的所有方法变为异步调用,那么如何指定某些方法为异步调用呢?下面讲解下如何正确地设置默写方法为异步调用. 假如你只需要设置接口里的方法sayHello为异步调用,那么可以使用下面方式: final List<MethodConfig> asyncMethodList = new ArrayList<MethodConfig>(); MethodConfig methodCon…
同理我们看下服务消费端启动流程时序图: 在<Dubbo整体架构分析>一文中,我们提到服务消费方需要使用ReferenceConfig API来消费服务,具体是调用代码(1)get()方法来生成远程调用代理类.get()方法最终会调用createProxy方法来具体创建代理类,其中createProxy结合时序图的核心代码如下: @SuppressWarnings({"unchecked" , "rawtypes" , "deprecation&…
Dubbo默认的底层网络通讯使用的是Netty,服务提供方NettyServer使用两级线程池,其中 EventLoopGroup(boss) 主要用来接受客户端的链接请求,并把接受的请求分发给 EventLoopGroup(worker) 来处理,boss和worker线程组我们称之为IO线程. 如果服务提供方的逻辑能迅速完成,并且不会发起新的IO请求,那么直接在IO线程上处理会更快,因为这减少了线程池调度. 但如果处理逻辑很慢,或者需要发起新的IO请求,比如需要查询数据库,则IO线程必须派发…
首先我们通过一个时序图,直观看下Dubbo服务提供方启动的流程: 在<Dubbo整体框架分析>一文中我们提到,服务提供方需要使用ServiceConfig API发布服务,具体是调用代码(1)export()方法来激活发布服务.export的核心代码如下: public synchronized void export(){ ... // 这里是延迟发布 if(delay != null && delay > 0){ delayExportExecutor.schedul…
Dubbo的集群容错策略 正常情况下,当我们进行系统设计时候,不仅要考虑正常逻辑下代码该如何走,还要考虑异常情况下代码逻辑应该怎么走.当服务消费方调用服务提供方的服务出现错误时候,Dubbo提供了多种容错方案,缺省模式为failover,也就是失败重试. Dubbo提供的集群容错模式 下面看下Dubbo提供的集群容错模式: Failover Cluster:失败重试 当服务消费方调用服务提供者失败后自动切换到其他服务提供者服务器进行重试.这通常用于读操作或者具有幂等的写操作,需要注意的是重试会带…
上一篇中(Web应用中模板的工作流程分析),已经分析了模板的渲染流程,以及相关参数获取及设置原理.这篇主要讲述模板在实际应用案例. 11.1 需求 根据用户输入的两次密码,判断两次密码是否一致,并将判断后的结论用自定义的模板方法格式化输出. 备注:只为满足演示实验需要,不考虑密码的安全性. 11.2 结果预览 两次密码输入一致时,下面显示绿色的结论: 两次密码输入不一致时,实现红色的结论: 11.3 代码结构 其中, controllers:为页面控制器模块,放置所有业务handlers.里面再…