vlambda博客
学习文章列表

Dubbo源码:跟着Demo学习基本使用

勾哥:Dubbo 是一款高性能、轻量级的 RPC 框架,由阿里开源,从 Apache 孵化毕业并成为顶级项目。之后很快就成为阿里、京东、小米、携程等大厂热衷的技术栈。使用 Dubbo 和对其感兴趣的 Java 开发者非常多,所以我们请杨大从 Dubbo 基础开始讲起,想进大厂的同学跟住!

下面我将从示例来简单介绍 Dubbo 的基本使用。


首先,你需要启动 ZooKeeper 作为注册中心,然后编写一个业务接口作为 Provider 和 Consumer 的公约。


启动 ZooKeeper


那怎么去启动 ZooKeeper 呢?


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 default Using 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 模块

Dubbo源码:跟着Demo学习基本使用

在其 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:registry address="zookeeper://127.0.0.1:2181"/> 

最后,在 Application 中写个 main() 方法,指定 Spring 配置文件并启动 ClassPathXmlApplicationContext 即可。


  • dubbo-demo-xml-consumer 模块

Dubbo源码:跟着Demo学习基本使用

在 pom.xml 中同样依赖了 dubbo-demo-interface 这个公共模块。



<!-- 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() 方法了。

最近每天都有不少同学加我,受众若惊哈哈。关注我的朋友们不如说说自己想看啥,什么深度,或者提提意见。抽两个朋友赠珍藏大厂面试视频资料(本周五开)!

勾勾的Java宇宙 发起了一个读者讨论 你想让勾哥给你呈现什么内容? 精选讨论内容
Mona

再来一期女神?