SpringBoot 集成 dubbo

背景:为了学习 dubbo 的集成,先在自己电脑上尝试了一把,鼓捣一天,终于配置成功。首先我创建了两个 SpringBoot 项目,一个扮演 provider,一个扮演 consumer,还创建了一个 maven 项目,扮演公共接口角色。另外,dubbo 需要有一个注册中心,所以集成 dubbo([dubbo 官网],[dubbo 官方 SpringBoot 指南]) 之前,需要在电脑上安装 zookeeper([zookeeper 官网])。dubbo 的注册中心支持多种协议,zookeeper 只是其中一种,而且它只是协议,所以还需要有实现了该协议的客户端,dubbo 支持 zkclient 和 curator 两种客户端,但是对后者是从 2.3.0 才开始支持的。不过,SpringBoot 下这些客户端的集成就不用我们考虑了。
工具说明:Mac + brew(可选) + IDEA + Maven + zookeeper。
下边开始。

1. 安装 zookeeper

两种方式:可以去 zookeeper 官网下载压缩包,或者 brew install zookeeper。我是用的后者。安装完成之后,brew info zookeeper 查看 zookeeper 的安装信息,cd 到 zookeeper 的目录,在 bin 文件夹下,有 zkService 脚本文件,命令行运行,会看到如下结果:

➜  bin zkServer
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

它提示我们使用 ./zkServer + {} 中的命令。我们可以试一下,命令行中输入 ./zkServer status,会看到:

➜  bin ./zkServer status
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Error contacting service. It is probably not running.

提示我们未运行。那就使用 ./zkServer start,然后会看到:

➜  bin ./zkServer start
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED

运行成功。
这里还有重要的一点,关于 zookeeper 的配置。其实之前的命令中,zookeeper 已经提醒我们了:

Using config: /usr/local/etc/zookeeper/zoo.cfg

即使用的配置文件为 zoo.cfg。打开这个文件,我们会看到里边:

#The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/var/run/zookeeper/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
....

给我的感觉,zookeeper 的配置有点类似于处理器的时钟频率,先定义了一个 tick 耗费的时间,下边根据 tick 的定义了初始化时为了同步需要耗费的时间,请求发出与响应的间隔时间。不过现在对于我们运行 demo 比较重要的就是最下边的端口号,因为后边 provider 和 consumer 在进行注册的时候,需要 ip 地址和端口才能成功注册。当然,因为 zookeeper 是运行在本机的,所以 ip 地址就是 127.0.0.1。

2. 引入 dubbo 依赖

zookeeper 成功运行起来之后,我们就可以开始项目的配置了。在 provider 和 consumer 的两个项目的 pom 文件中,分别加入

        
        
            com.alibaba.boot
            dubbo-spring-boot-starter
            0.2.0
        

同时将 maven 设置成自动导入,然后在 External Libraries 中我们就可以看到 dubbo 的包已经成功引入。

3. 配置 dubbo

虽然 dubbo 的官方文档没有提到在 application.properties 配置,但是其 github 上 SpringBoot 工程配置指南中却提到了。我试过在 classpath 路径下创建 dubbo.properties 文件进行配置,运行也没问题,不过没有提示,应该是我哪一块配置的不对,不过在 application.properties 中配置就会有提示,所以最后我还是在 application.properties 中配置的。主要的配置项目有:

#设置服务提供者的信息 以下信息必须配置
#直接使用工程名称即可
dubbo.application.id=ConsumerService
dubbo.application.name=ConsumerService
#注册中心的 ip 地址及端口号
dubbo.registry.address=127.0.0.1:2181
#注册中心的协议类型
dubbo.registry.protocol= zookeeper

其他的配置可以参见官网说明,如果需要自行配置。

4. 配置 provider 和 consumer

4.1 开启 dubbo 注解配置

都在工程的注 application 文件中开启 dubbo 的注解配置。即在 @SpringBootApplication 上方添加:@EnableDubbo。

4.2 配置 provider

在 provider 类的声明头部,添加 @Service 注解,表明该类是 service 的提供类。

// 注意这里的 @Service 不要选择成 Spring 框架的那个!是 alibaba.dubbo 的那个。
@Service
public class ProviderServiceClass implements CommonInterface {
    @Override
    public List getDataFromProvider() {
        List addrList = new ArrayList();
        addrList.add("北京市海淀区");
        return addrList;
    }
}

4.3 配置 consumer

在 consumer 类中,我们一般会定义一个 CommonInterface 接口类型的私有变量,下边在返回数据的时候我们直接调用 CommonInterface 的方法,运行时 dubbo 自动会将该私有变量链接成 provider 对象。配置完之后大概是这个样子:

@RestController
public class ConsumerServiceClass {

    @Reference
    private CommonInterface interInstance;

    @RequestMapping("/someAddress")
    public List getData() {
        return interInstance.getDataFromProvider();
    }
}

5. 启动项目并验证

分别启动两个项目,然后在浏览器中请求本机地址 /someAddress ,这时会看到成功返回 "北京市海淀区" 。至此,SpringBoot 项目集成 dubbo 最简单的集成即已完成。

你可能感兴趣的:(SpringBoot 集成 dubbo)