Dubbo 是一款高性能Java RPC框架,如今有不少公司都在使用,鑑於技多不壓身的原則,折騰一下這玩意java
下載地址 zookeeperlinux
解壓後啓動 windowsgit
bin/zkServer.cmd
Linuxgithub
./zkServer.sh
2.6.x 版本後
dubbo-admin
庫被遷移新地址 dubbo-admin 部分功能尚不能使用,並且是英文的web
這裏使用 2.5.x
,依然仍是原來的倉庫,只不過須要將分支切換到 2.5.x
才能下載到spring
下載下來以後打包apache
cd <path>/incubator-dubbo-dubbo-2.5.10/dubbo-admin mvn install -Dmaven.test.skip=true
將target
目錄下的dubbo-admin-2.5.10.war
放到tomcat
中運行 windows
注意:
dubbo-admin
不支持jdk1.8
,因此要更改jdk
環境變量, 這裏提供不更改jdk
環境變量的方法api
cd <path>/apache-tomcat-8.5.23/bin
window
修改 setclasspath.bat
在開頭加入jdk
tomcat
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 Spring-Boot
建立maven項目,項目結構以下
添加依賴
<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); }
<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
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
能看到有一個應用說明註冊成功,不然不成功
<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
註解中指定
若是學習中遇到困難,歡迎留言討論