Dubbo 是一款高性能Java RPC框架,现在有很多公司都在使用,鉴于技多不压身的原则,折腾一下这玩意
简介
- spring boot 是当前比较流行的开发工具组合框架,他并不是一个新框架;由于它集合了很多其他的框架和工具,所以用起来很方便
- zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。也是dubbo推荐的注册中心
安装
安装zookeeper
下载地址
解压后启动 windows
bin/zkServer.cmd
Linux
./zkServer.sh
dubbo 管理控制台dubbo-admin
2.6.x 版本后
dubbo-admin
库被迁移新地址 部分功能尚不能使用,而且是英文的
这里使用 2.5.x
,依然还是原来的仓库,只不过需要将分支切换到 2.5.x
才能下载到
下载下来之后打包
cd/incubator-dubbo-dubbo-2.5.10/dubbo-adminmvn install -Dmaven.test.skip=true
将target
目录下的dubbo-admin-2.5.10.war
放到tomcat
中运行
注意:
dubbo-admin
不支持jdk1.8
,所以要更改jdk
环境变量, 这里提供不更改jdk
环境变量的方法
cd/apache-tomcat-8.5.23/bin
window
修改 setclasspath.bat
在开头加入jdk
set JAVA_HOME=\jdk1.7.0_75set JRE_HOME= \jdk1.7.0_75\jre
linux
修改 setclasspath.sh
JAVA_HOME=/jdk1.7.0_75JRE_HOME= /jdk1.7.0_75/jre
启动tomcat
访问
用户名和密码在WEB-INF/dubbo.properties
可修改
Dubbo项目搭建
官方也有相关的示例可供参考 参见:
创建maven项目,项目结构如下
父级模块pom.xml
添加依赖
org.springframework.boot spring-boot-starter-parent 2.0.5.RELEASE
com.alibaba.boot dubbo-spring-boot-starter 0.2.0
在公共模块写一个接口
package com.dubbo.api;public interface DemoService { public String helloWorld(String name);}
生产者模块
pom.xml
- 添加父级
com.dubbo DubboDemo 0.0.1-SNAPSHOT
- 添加公共模块
com.dubbo DubboDemoApi 0.0.1-SNAPSHOT
配置文件
src/main/resources/application.properties
spring.application.name = dubbo-provider-demoserver.port = 9090# 当前dubbo应用IDdubbo.application.id=live-dubbo-provider# 当前dubbo应用名称dubbo.application.name=live-dubbo-provider# 注册中心dubbo.registry.address=zookeeper://127.0.0.1:2181dubbo.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;@Servicepublic 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@SpringBootApplicationpublic 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
- 添加父级
com.dubbo DubboDemo 0.0.1-SNAPSHOT
- 添加公共模块
com.dubbo DubboDemoApi 0.0.1-SNAPSHOT
- 添加
spring boot web
支持
org.springframework.boot spring-boot-starter-web
配置文件
src/main/resources/application.properties
# Spring boot applicationSpring.application.name = dubbo-consumer-demoserver.port = 8010# 消费者应用IDdubbo.application.id=live-dubbo-consumer# 消费者应用名称dubbo.application.name=live-dubbo-consumer# 注册中心dubbo.registry.address=zookeeper://127.0.0.1:2181# 生产者提供的协议IDdubbo.protocol.id = dubbo# 生产者提供的协议名称dubbo.protocol.name = dubbo# 生产者提供的协议端口号dubbo.protocol.port = 20880
启动类
@SpringBootApplicationpublic class DubboConsumerApp { public static void main(String[] args) { SpringApplication.run(DubboConsumerApp.class, args); }}
调用生产者
@RestControllerpublic class DemoConsumerController { @Reference private DemoService demoService; @RequestMapping("/hello") public String hello(String name) { return demoService.helloWorld(name); }}
启动后访问 出现如下界面则表示成功
到此基本的入门是没有问题了
注意
注意使用了spring-boot + dubbo的配置文件dubbo的配置信息是没有spring前缀的
错误示例spring.dubbo.application.name=live-dubbo-consumer
这样 dubbo
是无法获取的,除非在 @Service
注解中指定
结语
如果学习中遇到困难,欢迎留言讨论