springboot+dubbo+zookeeper
本文將實現使用springboot+dubbo+zookeeper搭建能夠提供遠端服務的架構
目錄
一. 環境搭建
1. 搭建zookeeper服務
1.1 進入zookeeper官網進行下載
https://zookeeper.apache.org/releases.html
注:zookeeper從3.5.x 左右開始,就分為兩個包下載,一個是bin的,我們就下載這個bin的,因為這個是已經編譯過的,zookeeper可以直接執行。
1.2 啟動zookeeper服務
將下載好的壓縮包解壓後,進入到conf目錄下,並copy一份zoo_sample.cfg命名為zoo.cfg(因為zookeeper啟動預設會使用改檔名)
在zoo.cfg中,可以檢視zookeeper的埠配置等資訊
然後進入bin路徑下,啟動zookeeper服務,執行zkServer.cmd(Linux執行.sh 檔案)
1.3 排坑
如果服務啟動失敗閃退,通過cmd視窗執行可以檢視報錯資訊
如果是JDK問題,可能是java環境變數JAVA_HOME路徑帶有空格。重新設定下環境變數即可。
1.4 測試
zookeeper服務啟動後,可以執行zkCli.cmd啟動客戶端,測試能夠連線成功
2. 下載dubbo-admin專案,監控服務
dubbo-admin專案時dubbo開發的一個用於檢測dubbo服務的開源專案。使用該專案可以很好的監控服務程式
2.1 下載原始碼
dubbo-admin的專案託管在github上,可以通過地址:https://github.com/apache/dubbo-admin 下載master分支專案到本地
2.2 執行專案
修改配置檔案,可以修改zookeeper連線的IP:
在dubbo-admin專案中的resource下有個application.properties檔案,可以修改需要監控的zookeeper服務、埠等
將專案通過mvn打包:mvn clean install -Dmaven.test.skip=true
將生成的jar包執行即可訪問,預設的賬號密碼是:root/root
二. 建立專案
本例將建立三個專案
provider:服務提供者(介面暴露給zookeeper,供別人遠端呼叫)
cosumer:服務消費者(呼叫provider的介面)
common:公共實體類
dubbo呼叫RPC遠端服務的本質就是將service實現類註冊為一個bean,然後通過dubbo的通訊方式完成呼叫。
1. IDEA建立專案
首先建立一個空白專案,然後建立三個springboot專案的module
2. 匯入依賴
要想使用dubbo,就需要匯入對應的依賴
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!--zookeeper-->
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- 引入zookeeper -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<!--排除這個slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
3. 修改配置檔案,連線zookeeper
在provider和cosumer專案中,修改配置檔案,連線zookeeper:
對弈provider來說,需要設定掃描的包路徑,並且將需要暴露的服務,用dubbo提供的Service修飾
package com.lemon.provider.service;
import com.lemon.common.pojo.UserPO;
import org.apache.dubbo.config.annotation.Service;
/**
* dubbo服務提供介面
* 匯入的是dubbo下的service註解,指定服務版本,以及該服務對應的介面類,預設是實現的介面
* @Date 2020/10/21 11:45
**/
@Service(version = "1.0.0", interfaceClass = TestService.class)
public class TestServiceImpl implements TestService{
@Override
public UserPO test() {
UserPO po = new UserPO();
po.setId(1);
po.setName("測試使用者");
return po;
}
}
4. 呼叫服務
此時啟動provider可以再dubbo-admin中監測到我們啟動的服務了
編寫消費者,呼叫服務介面測試:
package com.lemon.cosumer.controller;
import com.lemon.common.pojo.UserPO;
import com.lemon.provider.service.TestService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Date 2020/10/21 12:30
**/
@RestController
public class Test {
//dubbo提供的呼叫遠端服務的註解
@Reference
TestService testService;
@RequestMapping("/test")
public String test() {
UserPO po = testService.test();
return "通過dubbo服務獲取的使用者名稱是:" + po.getName() + ",使用者ID是:" + po.getId();
}
}
測試完成:
更多詳細資訊,請參考github地址原始碼:
https://github.com/leanmTree/springboot_dubbo
+