Spring boot dubbo+zookeeper 搭建------基于gradle项目的消费端与服务端分离实战

 

1. Dubbo简介

 

  Dubbo是Alibaba开源的分布式框架,是RPC模式的一种成熟的框架,优点是可以与Spring无缝集成,应用到我们的后台程序中。具体介绍可以查看Dubbo官网

2. Why Dubbo

  •   项目服务化后,项目之间的高性能通讯问题。(项目被拆分成多个服务模块后必然会涉及模块之间的通讯)。在应用Dubbo后,在项目中可以像调用本地方法一样调用远程方法。
  •   利用ZooKeeper服务,可以使服务消费方能动态的查找服务提供方,使地址透明。
  •   每个服务提供方相当于一个单独的项目,使我们的主项目代码量减少,方便维护。

3. 搭建项目

  经过多次尝试,最终选出了一套比较完美的方案,实现了消费方与提供方分离,并同时注册到zookeeper中,使消费方调用提供方的接口。在实际应用中,消费方是我们已经在开发的项目,而服务方是我们新建的项目,提供了几个相对独立而又复杂的接口。如下:

  1)定义服务接口

       这一步需要我们新建一个新的项目,其中包含了我们需要的接口名称,不需要实现。目的是承接消费方与服务方,实现二者分离。

     首先,我们新建一个Gradle项目,注意不要使用Spring Initializr创建项目,这样会使得接口不能被调用!

 

 

 

  一般来说,第一次创建好的Gradle项目会没有src路径,需要我们用gradle命令来生成。我们在build.gradle文件中加入以下命令

task "create-dirs" << {
    sourceSets*.java.srcDirs*.each {
        it.mkdirs()
    }
    sourceSets*.resources.srcDirs*.each{
        it.midirs()
    }
}

 

  在右侧gradle插件中会自动生成create-dirs命令:

 

 

  执行命令后便可生成src路径,然后建议重启项目。

  接下来是创建接口,注意要先在src中新建一个包,再在包中创建接口。

 

  之后利用gradle的打包功能,将服务打包备用。

 

   2)服务提供方

    服务提供方是我们实现独立功能的项目。我们新建一个Spring项目。首先将上一步打好的包引入这个项目

  •   在根目录中新建名为lib的包,并将jar包粘贴到这个包中,如下:

                     

  •   在build.gradle中引入这个包:在dependencies{ }中添加 compile files('lib/server-1.0.jar')

    

    然后添加dubbo依赖。在Maven公共仓库中有许多dubbo的依赖,不乏包括apache和alibaba等很多名字花里胡哨的依赖,但经过尝试,大多数都半途而废,最终找到一个能用的依赖!

    compile group: 'com.gitee.reger', name: 'spring-boot-starter-dubbo', version: '1.1.1'

    注意,只需要额外添加这一条依赖,dubbo已经实现了注册zookeeper功能。

  

 

    下一步是实现接口

       请忽略上图中的hanlp.properties配置文件。

    这里需要注意的是@Service是使用dubbo依赖中的注解。而实现类我这里是调用了Hanlp汉语言处理包实现了输入内容的语义识别,读者练习的时候可以直接return "Hello";

 

     最后一步是添加配置,将application.properties配置文件修改为application.yml,添加如下配置:

spring:
  dubbo:
    application:
      name: demo-provider
    base-package: hanlp.hanlp.service  # dubbo服务发布者所在的包,注意根据实际情况修改这个路径
    registry:
      protocol: zookeeper
      address: 127.0.0.1
      port: 2181
    protocol:
      name: dubbo
      serialization: hessian2
    provider:
      retries: 0
server:
  port: 8088

 

     到这一步项目还不能跑起来,因为我们还没有启动zookeeper服务,下面我们安装zookeeper。

 

   3)zookeeper安装配置

    这一步比较简单,因为答主在开发的项目是在linux中运行的,所以分别说明一下zookeeper在windows和linux上的安装配置.  zookeeper下载地址

      在启动zookeeper服务后,便能启动服务提供方的项目了。查看项目启动日志,看最后几行:

    

    同时再查看zkServer日志:

 

    说明项目已经成功注册到zookeeper服务中,接下来我们要用消费方去调用服务方的接口。这时候可以在选择一个正在开发中项目作为消费方,这里为了演示,我们新建一个spring项目。

 

 

   4)消费方

    创建好项目后,同样需要将第一步中打好的包引入这个项目,再添加dubbo的依赖,操作与第二步相同。有区别的地方是配置不尽相同:

spring:
  dubbo:
    application:
      name: demo-consumer
    base-package: hanlp.search.controller #这里需要根据情况修改
    registry:
      protocol: zookeeper
      address: 127.0.0.1
      port: 2181
    protocol:
      name: dubbo
server:
  port: 8081

    

      我们创建一个controller来展示接口的调用情况:

      

      

                在上面使用@Inject注解来引入服务,消费方会自动从zookeeper中取出对应的服务。

      启动项目!查看日志发现消费方也注册到zookeeper中。我们在浏览器中访问三次消费方controller的接口:

              

                

                

      

     可以看到返回的内容是Hanlp包识别的结果,说明消费方已经能成功调用服务方的接口,而对于消费方来说,感觉上是在调用本地的方法一样,感受到了RPC服务的魅力。

 

     至此,dubbo服务搭建完成!后续再慢慢学习它的高级用法。

 

 

 

 

      

 

 

 

 

 

 

  

posted @ 2018-09-06 10:29  Uglthinx  阅读(2480)  评论(0编辑  收藏  举报