Dubbo 是一款高性能Java RPC框架,現在有很多公司都在使用,鑑於技多不壓身的原則,折騰一下這玩意
簡介
- spring boot 是當前比較流行的開發工具組合框架,他並不是一個新框架;由於它集合了很多其他的框架和工具,所以用起來很方便
- zookeeper 是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,它是集羣的管理者,監視着集羣中各個節點的狀態根據節點提交的反饋進行下一步合理操作。最終,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。也是dubbo推薦的註冊中心
安裝
安裝zookeeper
下載地址 zookeeper
解壓後啓動 windows
bin/zkServer.cmd
Linux
./zkServer.sh
dubbo 管理控制檯dubbo-admin
2.6.x 版本後
dubbo-admin
庫被遷移新地址 dubbo-admin 部分功能尚不能使用,而且是英文的
這裏使用 2.5.x
,依然還是原來的倉庫,只不過需要將分支切換到 2.5.x
才能下載到
下載下來之後打包
cd <path>/incubator-dubbo-dubbo-2.5.10/dubbo-admin
mvn install -Dmaven.test.skip=true
將target
目錄下的dubbo-admin-2.5.10.war
放到tomcat
中運行
注意:
dubbo-admin
不支持jdk1.8
,所以要更改jdk
環境變量, 這裏提供不更改jdk
環境變量的方法
cd <path>/apache-tomcat-8.5.23/bin
window
修改 setclasspath.bat
在開頭加入jdk
set JAVA_HOME=<path>\jdk1.7.0_75
set JRE_HOME=<path>\jdk1.7.0_75\jre
linux
修改 setclasspath.sh
JAVA_HOME=<path>/jdk1.7.0_75
JRE_HOME=<path>/jdk1.7.0_75/jre
啓動tomcat
訪問 http://host:port/dubbo-admin-2.5.10
用戶名和密碼在WEB-INF/dubbo.properties
可修改
Dubbo項目搭建
官方也有相關的示例可供參考 參見:Dubbo Spring-Boot
創建maven項目,項目結構如下
父級模塊pom.xml
添加依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
在公共模塊寫一個接口
package com.dubbo.api;
public interface DemoService {
public String helloWorld(String name);
}
生產者模塊
pom.xml
- 添加父級
<parent>
<groupId>com.dubbo</groupId>
<artifactId>DubboDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
- 添加公共模塊
<dependency>
<groupId>com.dubbo</groupId>
<artifactId>DubboDemoApi</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
配置文件
src/main/resources/application.properties
spring.application.name = dubbo-provider-demo
server.port = 9090
# 當前dubbo應用ID
dubbo.application.id=live-dubbo-provider
# 當前dubbo應用名稱
dubbo.application.name=live-dubbo-provider
# 註冊中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.server=true
# 生產者暴露給消費者協議
dubbo.protocol.name=dubbo
# 生產者暴露給消費者端口
dubbo.protocol.port=20880
實現API接口
package com.dubbo.provider.service;
import org.springframework.util.StringUtils;
import com.alibaba.dubbo.config.annotation.Service;
import com.dubbo.api.DemoService;
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String helloWorld(String name) {
return "Hello "+(StringUtils.isEmpty(name) ? "world": name);
}
}
注意
@Service
註解不是spring
的註解 而是com.alibaba.dubbo.config.annotation.Service
啓動類
@EnableDubbo
@SpringBootApplication
public class DubboProviderApp {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApp.class, args);
}
}
@EnableDubbo
註解表示 開啓dubbo
服務 或者在配置文件(application.properties
) 添加dubbo.scan ( 掃描dubbo
包 ) 也可以開啓
- 可以不是
web
項目
啓動該項目 啓動完成後在 dubbo-admin
能看到有一個應用說明註冊成功,否則不成功
消費者模塊
pom.xml
- 添加父級
<parent>
<groupId>com.dubbo</groupId>
<artifactId>DubboDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
- 添加公共模塊
<dependency>
<groupId>com.dubbo</groupId>
<artifactId>DubboDemoApi</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
- 添加
spring boot web
支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
配置文件
src/main/resources/application.properties
# Spring boot application
Spring.application.name = dubbo-consumer-demo
server.port = 8010
# 消費者應用ID
dubbo.application.id=live-dubbo-consumer
# 消費者應用名稱
dubbo.application.name=live-dubbo-consumer
# 註冊中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
# 生產者提供的協議ID
dubbo.protocol.id = dubbo
# 生產者提供的協議名稱
dubbo.protocol.name = dubbo
# 生產者提供的協議端口號
dubbo.protocol.port = 20880
啓動類
@SpringBootApplication
public class DubboConsumerApp {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApp.class, args);
}
}
調用生產者
@RestController
public class DemoConsumerController {
@Reference
private DemoService demoService;
@RequestMapping("/hello")
public String hello(String name) {
return demoService.helloWorld(name);
}
}
啓動後訪問 http://host:8010/hello 出現如下界面則表示成功
到此基本的入門是沒有問題了
注意
注意使用了spring-boot + dubbo的配置文件dubbo的配置信息是沒有spring前綴的
錯誤示例
spring.dubbo.application.name=live-dubbo-consumer
這樣 dubbo
是無法獲取的,除非在 @Service
註解中指定
結語
如果學習中遇到困難,歡迎留言討論