springboot集成dubbo、zookeeper

来源:互联网 发布:mac上编程软件 编辑:程序博客网 时间:2024/06/05 11:50

代码地址:
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),
    这里写图片描述

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