勾哥:Dubbo 是一款高性能、轻量级的 RPC 框架,由阿里开源,从 Apache 孵化毕业并成为顶级项目。之后很快就成为阿里、京东、小米、携程等大厂热衷的技术栈。使用 Dubbo 和对其感兴趣的 Java 开发者非常多,所以我们请杨大从 Dubbo 基础开始讲起,想进大厂的同学跟住!
下面我将从示例来简单介绍 Dubbo 的基本使用。
首先,你需要启动 ZooKeeper 作为注册中心,然后编写一个业务接口作为 Provider 和 Consumer 的公约。
启动 ZooKeeper
Provider 的地址以及配置信息是通过注册中心传递给 Consumer 的。Dubbo 支持的注册中心尽管有很多,但在生产环境中,基本都是用 ZooKeeper 作为注册中心。
那怎么去启动 ZooKeeper 呢?
首先,你得下载 zookeeper-3.4.14.tar.gz 包(下载地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/)。下载完成之后执行如下命令解压缩:
tar -zxf zookeeper-3.4.14.tar.gz
解压完成之后,进入 zookeeper-3.4.14 目录,复制 conf/zoo_sample.cfg 文件并重命名为 conf/zoo.cfg,之后执行如下命令就可以启动 ZooKeeper了。
>./bin/zkServer.sh start# 下面为输出内容ZooKeeper JMX enabled by defaultUsing config: Users/xxx/zookeeper-3.4.14/bin/../conf/zoo.cfg # 配置文件Starting zookeeper ... STARTED # 启动成功
业务接口
在使用 Dubbo 之前,你还需要一个业务接口,这个业务接口可以认为是 Dubbo Provider 和 Dubbo Consumer 的公约,反映出很多信息:
Provider ,如何提供服务、提供的服务名称是什么、需要接收什么参数、需要返回什么响应
Consumer ,如何使用服务、使用的服务名称是什么、需要传入什么参数、会得到什么响应
dubbo-demo-interface 模块就是定义业务接口的地方,如下图所示:

其中,DemoService 接口中定义了两个方法:
public interface DemoService {String sayHello(String name); 同步调用异步调用default CompletableFuture<String> sayHelloAsync(String name) {return CompletableFuture.completedFuture(sayHello(name));}}
Demo:基于 XML 配置
在 dubbo-demo 模块下的 dubbo-demo-xml 模块,提供了基于 Spring XML 的 Provider 和 Consumer。
dubbo-demo-xml-provider 模块

在其 pom.xml 中除了一堆 dubbo 的依赖之外,还有依赖了 DemoService 这个公共接口:
<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-demo-interface</artifactId><version>${project.parent.version}</version></dependency>
DemoServiceImpl 实现了 DemoService 接口,sayHello() 方法直接返回一个字符串,sayHelloAsync() 方法返回一个 CompletableFuture 对象。
在 dubbo-provider.xml 配置文件中,会将 DemoServiceImpl 配置成一个 Spring Bean,并作为 DemoService 服务暴露出去:
<!-- 配置为 Spring Bean --><bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/><!-- 作为 Dubbo 服务暴露出去 --><dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService"/>
还有就是指定注册中心地址(就是前面 ZooKeeper 的地址),这样 Dubbo 才能把暴露的 DemoService 服务注册到 ZooKeeper 中:
<!-- Zookeeper 地址 --><dubbo:registry address="zookeeper://127.0.0.1:2181"/>
最后,在 Application 中写个 main() 方法,指定 Spring 配置文件并启动 ClassPathXmlApplicationContext 即可。
dubbo-demo-xml-consumer 模块

在 pom.xml 中同样依赖了 dubbo-demo-interface 这个公共模块。
在 dubbo-consumer.xml 配置文件中,会指定注册中心地址(就是前面 ZooKeeper 的地址),这样 Dubbo 才能从 ZooKeeper 中拉取到 Provider 暴露的服务列表信息:
<!-- Zookeeper地址 --><dubbo:registry address="zookeeper://127.0.0.1:2181"/>
还会使用 dubbo:reference 引入 DemoService 服务,后面可以作为 Spring Bean 使用:
<!--引入DemoService服务,并配置成Spring Bean--><dubbo:reference id="demoService" check="false"interface="org.apache.dubbo.demo.DemoService"/>
最后,在 Application 中写个 main() 方法,指定 Spring 配置文件并启动 ClassPathXmlApplicationContext 之后,就可以远程调用 Provider 端的 DemoService 的 sayHello() 方法了。
最近每天都有不少同学加我,受众若惊哈哈。关注我的朋友们不如说说自己想看啥,什么深度,或者提提意见。抽两个朋友赠珍藏大厂面试视频资料(本周五开)!





