Apache Dubbo讓調用遠程方法像調用本地一樣。
相信很多小夥伴都知道,最近很流行使用springcloud,全家桶用起來不亦樂乎。但是本文介紹的恰巧相反,是阿里巴巴開源的一款性能優異的分佈式RPC框架。隨著阿里巴巴重新維護Apache Dubbo,相信會有越來越多的小夥伴會接觸到並喜歡上它。本文介紹的是2.7.1版本Dubbo,結合springboot使用註解方式開發,註冊中心使用Zookeeper 3.4.11,快速開發你的分佈式集群服務。
Dubbo架構
Provider:服務提供方。比如電商系統中的用戶服務、訂單服務、支付服務、庫存服務、日誌服務等等。
Consumer:服務消費方。消費方通過註冊中心訂閱服務,調用服務提供方。
Registry:註冊中心。比如Zookeeper,進行服務註冊與發現。
Monitor:監控中心。統計服務調用次數和時間。
服務提供方在啟動服務時,向註冊中心註冊自己提供的服務。服務消費方在啟動服務時,向註冊中心訂閱自己所需要消費的服務。
讓咱們來一起做個Demo吧!
搭建父工程 dubbo-all
新建maven父工程dubbo-all,子模塊有三個:
dubbo-demo-api dubbo-demo-provider(springboot工程) dubbo-demo-consumer(springboot工程)
dubbo-demo-api中定義服務提供接口,dubbo-demo-provider中做實現。dubbo-demo-consumer為服務消費方,調用dubbo-demo-provider提供的服務。
父工程dubbo-all pom文件如下:
4.0.0 2.1.1.RELEASE 2.7.1 org.springframework.boot spring-boot-starter-parent 2.1.5.RELEASE com.dubbo.demo dubbo-all 1.0-SNAPSHOT pom dubbo-demo-api dubbo-demo-provider dubbo-demo-consumer
服務接口 dubbo-demo-api
在dubbo-demo-api工程中定義接口方法sayHello()如下:
pom文件如下:(依賴版本應該定義在父工程中)
4.0.0 com.dubbo.demo dubbo-all 1.0-SNAPSHOT com.dubbo.demo.api dubbo-demo-api 1.0.0 dubbo-demo-api Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.apache.dubbo dubbo 2.7.1 org.apache.zookeeper zookeeper 3.4.13 org.apache.curator curator-framework 2.8.0 org.apache.curator curator-recipes 2.8.0 org.springframework.boot spring-boot-maven-plugin
服務提供方 dubbo-demo-provider
在dubbo-demo-provider中引入dubbo-demo-api依賴,實現sayHello接口:
注意需在springboot啟動類中加入@EnableDubbo註解
dubbo-demo-provider pom文件如下:
4.0.0 com.dubbo.demo dubbo-all 1.0-SNAPSHOT com.dubbo.demo.provider dubbo-demo-provider 1.0.0 dubbo-demo-provider provider project for Spring Boot 1.8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test com.dubbo.demo.api dubbo-demo-api 1.0.0 org.springframework.boot spring-boot-maven-plugin
dubbo-demo-provider 配置文件如下:
application.yml
spring: application: name: dubbo-demo-provider server: port: 8088 dubbo: application: name: dubbo-demo-provider registry: address: zookeeper://localhost:2181 protocol: name: dubbo port: 20880
服務消費方 dubbo-demo-consumer
此時我們便可以在consumer中注入HelloService接口,遠程調用sayHello方法。
dubbo-demo-consumer中引入dubbo-demo-api依賴,pom文件如下:
4.0.0 com.dubbo.demo dubbo-all 1.0-SNAPSHOT com.dubbo.demo.consumer dubbo-demo-consumer 0.0.1-SNAPSHOT dubbo-demo-consumer Consumer project for Spring Boot 1.8 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test com.dubbo.demo.api dubbo-demo-api 1.0.0 org.springframework.boot spring-boot-maven-plugin
dubbo-demo-consumer 配置文件如下:
application.yml
spring: application: name: dubbo-demo-consumer server: port: 8089 dubbo: application: name: dubbo-demo-consumer registry: address: zookeeper://localhost:2181 protocol: name: dubbo port: 20880
開發步驟到此完成。
註冊中心 Zookeeper
下載zookeeper解壓到本地,在conf目錄下新建zoo.cfg文件,啟動zookeeper。注意:使用JAVA8沒有配置環境變量的小夥伴,啟動Zookeeper可能會報錯。建議配置一下環境變量。假如實在不想配置,可更改bin目錄下zkEnv.cmd文件,去掉java home校驗,設置JAVA目錄如下:
啟動zookeeper:
驗證結果
啟動服務提供方dubbo-demo-provider:
啟動服務消費方dubbo-demo-consumer:
在瀏覽器中訪問服務消費方提供的地址:
http://localhost:8089/test/sayHello
可以看到服務遠程調用成功!
服務監控 dubbo-admin
平常大家啟動dubbo-admin基本都是下載dubbo-admin代碼打成war包部署到tomcat上。本次展示springboot版本dubbo-admin,無需打包。
上Github找到dubbo-admin,下載master分支代碼。(要求使用dubbo 2.6版本以上)
https://github.com/apache/incubator-dubbo-admin
將下載好的代碼導入IntelliJ IDE中:
更改application.properties文件中用戶名密碼:
啟動dubbo-admin springboot工程:
在瀏覽器中輸入地址:(端口可自行更改)
http://localhost:7001
輸入用戶名密碼:
登陸之後即可對咱們的服務進行管理,比如升降權等。
原創不易,客觀點個贊吧!