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
注解中指定
若是学习中遇到困难,欢迎留言讨论