解密Spring Boot整合Dubbo RPC框架

25 篇文章 0 订阅
8 篇文章 0 订阅

前言

什么是spring boot?

什么是dubbo? a high-performance, java based, open source RPC framework

特点:

  • 一款分布式服务框架
  • 高性能和透明化的RPC远程服务调用方案
  • SOA服务治理方案

地址:

背景

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。
image

单一应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(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:

知识点

  1. 和kafka,redis那些不同,没有类似于服务器那个东西,全部由zookeeper那些管理
  2. 消费者远程调用时候,生产者必须启动,不然报错,导致无法启动。
  3. 有时间写个类似spring-boot-starter-dubbo,我上面的做法虽然可以实现,但是违背了SpringBoot框架的初衷。
  4. 看技术文档一定看官方文档,还是那句话,别被网上那些八流作者写的搞昏头。

最后:所有代码提交到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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值