本篇大概算是dubbo和zookeeper一個非常入門的整合,目的是對dubbo和zookeeper有一個初步的認識!
zookeeper:分布式的遠程服務注冊中心,
dubbo:遠程服務調度框架,
上面是對這兩者一個非常簡要的概括(可能不夠準確),簡單的單機部署步驟:
- 將zookeeper安裝在服務器上,并啟動;
- 專案中添加dubbo和zookeeper等相關依賴,并配置dubbo的相關屬性;
- 創建服務提供者;
- 創建服務消費者;
首先,為了方便服務消費者對提供者的調度,我們創建一個多moudle的專案(順便也是對多moudle專案的一個初步認識):
1.創建父moudle,New Project,選擇Spring initializr,并添加web模塊:

2.創建成功后,洗掉src檔案夾,并在pom.xml中添加packaging屬性:

3.添加moudle,選擇maven:

Parent選擇你最初創建的父moudle:

其它moudle同上,最終專案結構為:

打開根目錄下的pom.xml,發現moudle已經全部自動添加進去:

上面僅僅是比較簡單的分模塊劃分例子:
common:一些共用的工具,或實作某些功能的第三方庫;
dao:持久化層,可以是jpa或mybatis,用于操作資料庫;
service:服務層;
web:專案啟動模塊,包含controller以及web頁面、功能相關(當然,controller也可以提出來);
此時,這些模塊之間并沒有什么聯系,如果需要關聯,就需要創造依賴關系,該例子依賴關系為:
dao依賴common,service依賴dao,web依賴service:
dao下的pom.xml:
<dependencies>
<dependency>
<groupId>com.blog</groupId>
<artifactId>byl-common</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
service下的pom.xml:
<dependencies>
<dependency>
<groupId>com.blog</groupId>
<artifactId>byl-dao</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
web下的pom.xml:
<dependencies>
<dependency>
<groupId>com.blog</groupId>
<artifactId>byl-service</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
在web的src檔案夾下創建包以及啟動類:

@SpringBootApplication(scanBasePackages = "com.blog")
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
scanBasePackages 一定不要忘了加,“com.blog”即groupId!
為了測驗依賴關系是否正確,我們可以在common模塊下創建一個Utils類,并在web模塊下呼叫:

一般的,只要參考成功,說明已經沒問題了,現在可以運行一下:

OK,運行成功,我們現在來部署zookeeper,本文中使用的zookeeper版本為3.4.14(最新版目前為3.6.2),下載鏈接:http://archive.apache.org/dist/zookeeper/
我們測驗時,可以先部署到本地,本例在windows環境下:
1.解壓壓縮包:

2.打開conf檔案夾,并復制一份zoo_sample.cfg重命名為zoo.cfg,并打開修改和添加:
dataDir=E:\zookeeper-3.4.14\data
dataLogDir=E:\zookeeper-3.4.14\log
路徑均為zookeeper根目錄,data和log檔案夾自行創建!
3.進入bin目錄,直接雙擊運行zkServer.cmd,啟動zookeeper!(linux部署步驟基本一樣)

zookeeper運行成功后,我們開始在專案中創建服務提供者,本例中service模塊會作為服務提供者,而web模塊則作為服務消費者(注意:專案中的common和dao基本沒用,僅僅是為了測驗多模塊專案構建)!
打開根目錄的pom.xml,添加dubbo和zookeeper相關依賴(因為本人也是初步使用,對doubbo和zookeeper的配置,網上的案例五花八門,各種版本,各種寫法都有,真真的沒一個管用…本例也是經過不少時間摸索,才成功運行):
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
</dependency>
curator和zkclient都是zookeeper客戶端,這里選用了curator,有些案例中既有curator又有zkclient,而且版本號五花八門,初學者很容易頭暈!
進入service模塊,先在resources檔案夾下,創建組態檔application.properties,再在src檔案夾下創建包及Service:
interface:
public interface TestProviderService {
String testProvider();
}
impl:
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;
@Component
@DubboService
public class TestProviderServiceImpl implements TestProviderService {
@Override
public String testProvider() {
return "我是服務提供者";
}
}
注意,必須用@DubboService注解,來注冊Service!
此時,打開application.properties,配置dubbo:
(zookeeper上面已經安裝并啟動成功,服務地址即本地ip+埠號2181)
#dubbo應用名稱(自定義)
dubbo.application.name=byl_blog_service
dubbo.registry.protocol=zookeeper
#zookeeper服務地址,本地IP:2181
dubbo.registry.address=zookeeper://192.168.1.95:2181
#固定/默認
dubbo.protocol.name=dubbo
#dubbo埠占用時可以修改
dubbo.protocol.port=20880
#需要掃描的遠程服務所在的包名
dubbo.scan.base-packages=com.byl.service
為了避免與埠8080沖突,我們最好再配置一下服務埠號:
server.port=8081
創建啟動類并啟動服務提供者:

如果運行不報錯,并出現下面log,則表示服務提供者運行成功(服務注冊成功)!

此時,我們可以通過dubbo管理后臺dubbo-admin去查看服務資訊,大家可以自行下載一個dubbo-admin的war包,或者去官方gitbub上運行最新的dubbo-admin,本例中使用的是dubbo-admin-2.5.3.war!
下載成功后,部署到tomcat下:

啟動tomcat,并打開瀏覽器輸入:http://localhost:8080/dubbo-admin-2.5.3/

默認用戶名和密碼都為root,登錄成功后:

輸入我們創建的遠程服務全路徑:com.blog.service.TestProviderService,并搜索:

成功顯示提供者:192.168.1.95:20880!
此時,打開web模塊,也就是服務消費者,準備測驗一下這個遠程服務:
創建一個controller:

@RestController
@RequestMapping("/test")
public class TestController {
@DubboReference
TestProviderService testProviderService;
@GetMapping("/test")
public String test() {
String str = testProviderService.testProvider();
return str;
}
}
注意:必須用@DubboReference注解,參考該服務!
配置application.properties:
server.port=8082
dubbo.application.name=byl_blog_web
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://192.168.1.95:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
運行WebApplication,在瀏覽器輸入:http://localhost:8082/test/test

成功呼叫!
此時再查看dubbo-admin的消費者:

完美運行!
需要注意的是,服務提供者一定要先運行,服務注冊成功后,再運行服務消費者,另外,各埠號要注意不要沖突!
專案下載地址:https://download.csdn.net/download/baiyuliang2013/14945043
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/254063.html
標籤:java
上一篇:Spring中@Import注解的使用和實作原理(超詳細!!!)
下一篇:二分查找
