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服務搭建完成!后續再慢慢學習它的高級用法。

 

 

 

 

      

 

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM