代码地址:
spirngboot_dubbo_base:https://github.com/kevindai007/springboot_dubbo_base
spirngboot_dubbo_server:https://github.com/kevindai007/springboot_dubbo_Server
spirngboot_dubbo_consumer:https://github.com/kevindai007/springboot_dubbo_Consumer

前段时间在springboot中继承了dubbo、zookeeper,期间遇到了不少坑,下面一起来看看怎么集成,怎么避免坑

  1. 首先简单介绍一下dubbo,dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案;zookeeper是dubbo推荐的注册中心(这两个在此不做展开讲解,有兴趣的朋友可以自己了解一下)
  2. 安装zookeeper:从官网上下载zookeeper的安装包:http://mirror.bit.edu.cn/apache/zookeeper/;下载后放到Linux服务器上,然后进入conf文件夹,复制zoo_sample.cfg文件命名为zoo.cfg,然后到bin文件夹输入命令zkServer.sh start启动zookeeper,如图
    这里写图片描述
  3. 新建dubbo_base工程(dubbo_base工程主要是为了给dubbo_consumer、dubbo_seerver提供依赖),免得写重复代码;新建一个工程,如下图
    这里写图片描述
    工程很简单,只定义了一个MsgService的接口,然后把工程打成jar包以提供给其他工程依赖

    注意这里可能会产生第一个坑:自己的工程打成的jar包如何被其他maven工程依赖?
    拿我这个工程举例,当我打好jar包之后,找到maven仓库地址
    这里写图片描述
    然后在maven仓库中,按照工程的groupId、artifactId、version新建路径存放jar包,如下图
    这里写图片描述
    这里写图片描述

  4. 新建springboot_dubbo_server工程,工程结构如下
    这里写图片描述
    其中DubboServerApplication.java为springboot的启动类,MsgServiceImpl为服务的实现类,application.properties为springboot的配置文件,dubbo-server.xml为dubbo的配置文件
    dubbo-server.xml如下(这里列出主要配置,详细的见github工程):

        <!-- 提供方应用名称信息,这个相当于起一个名字,可以从dubbo管理页面比较清晰看出是哪个应用暴露出来的 -->
    <dubbo:application name="dubboServer"></dubbo:application>
    <dubbo:annotation package="com.kevindai.*" />
    <!-- 使用zookeeper注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://192.168.17.107:2181" check="false" subscribe="false" register=""></dubbo:registry>
    <!-- 要暴露的服务接口 -->
    <dubbo:service interface="com.kevindai.service.MsgService" ref="msgService" />  

    pom文件在此不列出,可参考github上的内容


    这里又会有几个坑:

    • dubbo与springboot的spring冲突,因此需要移除dubbo中的spring引用,代码如下
    <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
            </exclusions>
    </dependency>
    • zookeeper与springboot的日志文件冲突,需要移除zookeeper的日志引用
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    • zk客户端依赖问题
    <!-- zk客户端,不加的话启动会报 java.lang.NoClassDefFoundError: org/I0Itec/zkclient/exception/ZkNoNodeException -->
        <!--一开始我依赖的是这个包,但启动时总是报错,后来发现是包的问题,换了依赖包之后一切正常   -->
        <!--<dependency>-->
            <!--<groupId>com.101tec</groupId>-->
            <!--<artifactId>zkclient</artifactId>-->
            <!--<version>0.10</version>-->
        <!--</dependency>-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

  5. 新建springboot_dubbo_consumer工程
    这里写图片描述

    dubbo-consumer.xml主要配置如下

        <dubbo:annotation package="com.kevindai.*" />
    
    <dubbo:application name="dubboConsumer"></dubbo:application>
    <!-- 使用zookeeper注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://192.168.17.107:2181" check="false"></dubbo:registry>
    <!-- 要引用的服务 -->
    <dubbo:reference interface="com.kevindai.service.MsgService" id="msgService"></dubbo:reference>

    在使用时,直接使用即可(能够使用MsgService是因为依赖了springboot_dubbo_base,能够注入成功则要感谢dubbo),
    这里写图片描述

到这里已经完成了,网上搜了搜好像还没有这么通俗详细的文章,自己也踩了不少坑,特此记录下来,希望能帮助各位同学

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐