(多图预警)

在学习Dubbo的过程中想搭建个demo来加深理解,但是从网上找了几个教程跟着做后发现很多教程都有些遗漏,要么少点注解要么少些配置的,总是跑不起来,于是自己摸索了半天后搭建起来一个跑的通的demo,并把过程记录下来送给和我一样刚刚接触的小白,以免有些童鞋因为搭不起demo而被折磨的放弃。

在教程正式开始之前我希望你已经准备好了如下几个需要的条件:

  1. jdk1.8+
  2. maven
  3. zookeeper(作为dubbo中服务的注册中心)

如果没有zookeeper可以去zookeeper官网按照文档安装一个,过程十分简单,相信你在五分钟之内就能够完成。

项目采用maven多模块架构开发,对于想要学习Springboot多模块开发的童鞋,这个教程也是一份不错的学习教程。

下面开始我们的demo搭建

1、新建maven父项目

dubbo apifox生成文档_Dubbo

dubbo apifox生成文档_Dubbo_02

dubbo apifox生成文档_zookeeper_03

dubbo apifox生成文档_zookeeper_04

新建的项目生成了如下pom文件,这个文件不需要手动修改

dubbo apifox生成文档_dubbo apifox生成文档_05

在父项目中我们不需要编写代码,所以这里可以直接删除掉整个src文件夹

dubbo apifox生成文档_ide_06

2、新建api模块

该模块用来统一组织项目中的api,将由后面的provider模块来提供具体的逻辑实现

因为api模块中只需要提供接口所以只需要新建一个普通的maven项目即可,该模块不需要新建为Springboot项目

dubbo apifox生成文档_dubbo apifox生成文档_07

dubbo apifox生成文档_ide_08

dubbo apifox生成文档_Dubbo_09

dubbo apifox生成文档_Dubbo_10

在api模块中,我们新建包并声明一个接口文件

dubbo apifox生成文档_Dubbo_11

新建包结构为com.hiram.dubbo.api.service

dubbo apifox生成文档_Springboot_12

在刚刚建好的包中新建一个类DemoService

dubbo apifox生成文档_Dubbo_13

dubbo apifox生成文档_ide_14

文件中我们生命一个sayHello方法

package com.hiram.dubbo.api.service;

public interface DemoService {
    public String sayHello(String name);
}

3、新建provider模块

下面我们新建一个provider模块,在该模块中我们要为刚刚在api模块中声明的service提供具体实现,并通过dubbo的@Service注解将实现的服务发布到dubbo中

dubbo apifox生成文档_ide_15

provider模块是dubbo中用来提供服务的角色,在此新建一个Springboot项目

dubbo apifox生成文档_Springboot_16

dubbo apifox生成文档_ide_17

dubbo apifox生成文档_zookeeper_18

dubbo apifox生成文档_Dubbo_19

新建Springboot项目后,我们需要在provider中增加dubbo的依赖,可以在https://mvnrepository.com/中按照下图的顺序来进行所需依赖的查找

dubbo apifox生成文档_dubbo apifox生成文档_20

dubbo apifox生成文档_dubbo apifox生成文档_21

在这里我演示选择的版本是0.2.0,我希望你也能选择这个版本,因为不同的版本之间会有略微的差异

dubbo apifox生成文档_ide_22

dubbo apifox生成文档_Springboot_23

复制好dubbo的依赖后我们粘贴到provider的pom中,同时我们把之前建好的api模块通过依赖方式引入进来

dubbo apifox生成文档_Springboot_24

在provider的配置文件中,我们进行一些简单的配置

其中自定义属性demo.service.version是用来规定dubbo服务的版本号,通过发布和使用相同版本号的服务可以减少错误发生的可能,版本的统一管理是开发的规范之一

更多dubbo相关的配置请大家去官网查阅,这里仅进行几项必要的配置

dubbo apifox生成文档_Springboot_25

下面我们需要在provider的启动文件中增加一个@EnableDubbo注解以开启Springboot对dubbo的支持

dubbo apifox生成文档_ide_26

接下来,新建包及实现类来实现api模块中声明的接口方法

dubbo apifox生成文档_zookeeper_27

dubbo apifox生成文档_Springboot_28

dubbo apifox生成文档_Springboot_29

dubbo apifox生成文档_ide_30

在这个实现类中要注意一点,增加的@Service注解是dubbo中的,注解中我们指定了版本号为配置文件中自定义的属性,注意注解不要引用错误

在方法的具体实现中我们简单的返回一个稍加处理后的String

dubbo apifox生成文档_Springboot_31

4、新建consumer模块

有了服务提供者provider提供服务,我们接下来新建一个服务消费者模块consumer用来消费服务提供者privoder模块提供的服务

dubbo apifox生成文档_zookeeper_32

dubbo apifox生成文档_ide_33

dubbo apifox生成文档_ide_34

dubbo apifox生成文档_zookeeper_35

dubbo apifox生成文档_Dubbo_36

同样,我们在consumer的pom中也要引入dubbo和api模块的依赖

dubbo apifox生成文档_ide_37

在配置文件中我们需要做小小的改动(部分修改和不必要属性的注释),只保留必要的部分即可

dubbo apifox生成文档_ide_38

同样我们需要在consumer中的启动类前增加@EnableDubbo注解

dubbo apifox生成文档_ide_39

服务提供者provider对内提供服务,服务消费者consumer消费provider提供的服务,同时consumer对外提供服务,所以我们在consumer中提供controller来增加外部访问的入口

dubbo apifox生成文档_zookeeper_40

dubbo apifox生成文档_zookeeper_41

dubbo apifox生成文档_dubbo apifox生成文档_42

dubbo apifox生成文档_Dubbo_43

在controller中,我们通过@Reference注解从dubbo引入需要的服务,同样在该注解中指定了服务的版本号为我们在配置文件中自定义的属性,引入了服务后就可以在请求中进行服务的调用了

dubbo apifox生成文档_ide_44

开发完成后,我们打开zookeeper服务

dubbo apifox生成文档_zookeeper_45

dubbo apifox生成文档_dubbo apifox生成文档_46

zookeeper启动完成后我们依次打开dubbo的服务提供者provider和服务消费者consumer,注意这里要先打开服务的提供者,如果消费者启动时引用了dubbo未在zookeeper中注册的服务,会启动失败

dubbo apifox生成文档_Dubbo_47

dubbo apifox生成文档_dubbo apifox生成文档_48

继续启动服务消费者consumer

dubbo apifox生成文档_Springboot_49

dubbo apifox生成文档_Springboot_50

启动过程都成功后就可以在浏览器中查看效果了

dubbo apifox生成文档_zookeeper_51