前言
什么是spring boot?
- https://docs.spring.io 官方网址
- https://docs.spring.io/spring-boot/docs/2.0.0.M5/reference/htmlsingle/ 官方文档
- https://docs.spring.io/spring-boot/docs/current/reference/pdf/spring-boot-reference.pdf PDF
什么是dubbo? a high-performance, java based, open source RPC framework
特点:
- 一款分布式服务框架
- 高性能和透明化的RPC远程服务调用方案
- SOA服务治理方案
地址:
- http://dubbo.io/ 官方网址
- https://dubbo.gitbooks.io/dubbo-user-book/ 操作指南
- https://github.com/alibaba/dubbo 代码托管github
背景
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
|
|
|
|
|
|
|
|
|
\|/
Dubbo应运而生
ZooKeeper搭建
zookeeper就不说了,分布式的监控协调利器
1 https://zookeeper.apache.org/ zookeeper 官网
2 http://blog.csdn.net/tengxing007/article/details/53572224 zookeeper搭建
插播一条广告:这里说一句话,这里没有像kafka,等等那种,会有一个Dubbo的主程序,然后连接客户端,可能思维习惯了
代码
先吐槽一把
我曹,终于到代码了,哈哈,先说明一下:由于spring官网对dubbo的客户端没有封装(其实就很简单了,再封装是否有种过度封装的感觉),网上也有很多进行封装成spring-boot-starter-dubbo依赖,如阿里,雷哥,。。。,看源码就知道,就是加几个注解,启动加载,完事。
<!--下面都是被人封装的
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.gitee.reger</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>-->
因此,对spring非常熟悉的愚者决定使用原生的方法进行spring Boot 配置,提示,前方高能:不熟悉spring者勿看
第一步
添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<!--排除掉spring相关的依赖包-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version> 3.4.9</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
第二步
编写代码,这里愚者就不写了,到处是源代码,还是推荐看官方的东西
1 http://dubbo.io/ 官方的quickstart
2 https://dubbo.gitbooks.io/dubbo-user-book/preface/usage.html 官方文档
3 https://dubbo.gitbooks.io/dubbo-user-book/configuration/ 4种方式配置
通过这些就可以实现远程调用
第三步
这样做实现springboot整合,刚刚说了,只要对spring熟悉一下就明白。有兴趣的联系我:tengxing7452@163.com
/**
* Author: Starry.Teng
* Email: tengxing7452@163.com
* Date: 17-10-19
* Time: 上午11:12
* Describe: dubbo 发布者
*/
@ImportResource("classpath*:dubbo-provider.xml")
@Configuration
public class DubboproviderConfig {
}
同理消费者也是如此,SpringBoot该咋样咋样,没有关系的,对吧,完成!!!
所有代码在github:https://github.com/tengxing/DubboLearn
报错集
报错1
Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'persistenceExceptionTranslationPostProcessor' defined in class path resource [org/springframework/boot/autoconfigure/dao/PersistenceExceptionTranslationAutoConfiguration.class]: Initialization of bean failed; nested exception is java.lang.IllegalStateException: No persistence exception translators found in bean factory. Cannot perform exception translation.
dubbo的jar包发生冲突
解决:
<!--排除掉spring相关的依赖包-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
报错2
Caused by: com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout by scan timer.
解决:
<dubbo:service interface="com.XXXX.XXXXX.CardService" ref="cardService" timeout="1200000"/>
另外一种是全局新修改的办法(timeout时间可以自己调整)
<dubbo:provider delay="-1" timeout="6000" retries="0"/>
所有代码在github:
知识点
- 和kafka,redis那些不同,没有类似于服务器那个东西,全部由zookeeper那些管理
- 消费者远程调用时候,生产者必须启动,不然报错,导致无法启动。
- 有时间写个类似spring-boot-starter-dubbo,我上面的做法虽然可以实现,但是违背了SpringBoot框架的初衷。
- 看技术文档一定看官方文档,还是那句话,别被网上那些八流作者写的搞昏头。
最后:所有代码提交到github:https://github.com/tengxing/DubboLearn
参考文章
0 https://dubbo.gitbooks.io/dubbo-user-book
1 https://blog.zjq.im/post/spring-boot-with-dubbo-start-error/
2 http://www.cnblogs.com/guokai870510826/p/5728622.html