天天看点

SrpingBoot + alibaba(apache) 官方 Dubbo +Zookeeper集成

dubbo 现在归到 apache 旗下管理。开了新的维护,对 springboot 也做了适配更新。

我最近搜索到的相关知识点,大部分集成的Dubbo都是非官方的版本或者是一些老旧的版本,有一些都是个人封装的。还有一些在springboot下还在用xml配置文件来引入Dubbo。这违背了springboot的初衷。既然Dubbo官方都开始维护,并且官方都发布针对springboot的支持,所以写下这篇文章,希望能填补这方面的空白,减少新人掉坑的耗时耗力,快速上手官方给出的适配。

这里是用单服务器运行,并没有部署zookeeper集群。

dubbo 官网:

        http://dubbo.apache.org/

dubbo spring boot 官网:  

        https://github.com/apache/incubator-dubbo-spring-boot-project/blob/master/README_CN.md

提供者

一、首先安装zookeeper,dubbo-admin

    1. 

        zookeeper  下载地址:https://archive.apache.org/dist/zookeeper/ 

        zookeeper 安装:http://dubbo.apache.org/books/dubbo-admin-book/install/zookeeper.html

        推介下载3.4.12稳定版。下载,解压。

        复制 zookeeper3.4.12 - conf - zoosample.cfg  重命名为:zoo.cfg

        (zookeeper 会默认加载 zoo.cfg配置文件 )

        zookeeper 目录下(和bin对齐目录)新建 data 文件夹

        修改 zoo.cfg 里 dataDir= "写你的data文件夹的完整路径" 例如:/root/zookeeper/data

        进入bin,windows 启动 zkServer.cmd  Linux 启动 ./zkServer.sh

    2. 

        dubbo-admin 安装:https://github.com/apache/incubator-dubbo/tree/dubbo-2.6.0

        下载好项目后,用 eclipse 或者 Intellij idea 等开发工具,导入admin工程,直接打war包,放入tomcat运行即可。

二、关键环节。我们的 spring boot 应用程序编写。

    1.新建 springboot工程 

        这里注意,工程必须为1.5.x 版本,否则不可以使用。我这里是 1.5.9.RELEASE(官方正在推出2.0.x的版本。以后也主打2.0.x以上的版本)

        PS: dubbo官方现在已经支持 springboot 为2.0.x 以上版本,对应dubbo的maven依赖版本为 0.2.0

    2.导包

    <!-- Dubbo -->
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.1.0</version>
    </dependency>
           
    <!-- zookeeper 连接 -->
    <dependency>
        <groupId>com.101tec</groupId>
        <artifactId>zkclient</artifactId>
        <version>0.7</version>
    </dependency>
           

    3.写一个接口(随意。可参考上面给出的官方文档例子)

       写一个实现类

       接口的实现类上面加注解@Service 。

       注意是引这个包下的。(import com.alibaba.dubbo.config.annotation.Service;)

       这里说明下,官方给出的@Service ( ** *** ***),里面的参数,是可以不写的。看官方文档给出的参数对照表,里面都是可选参数,不是必填的。所以这里,我们没有写。下面第“4.配置文件”给出的参考地址,有详细的配置信息参数说明。

   4.配置文件

dubbo:
  application:
    name: dubbo_txuser
  protocol:
    name: dubbo
    port: 20880
  registry:
    address: zookeeper://xxx.xxx.xxx.xxx:2181
  scan:
    base-packages: com.example.prom.exposeinterface
           

配置具体意思,官方中文文档写的很明白了。

参考地址:http://dubbo.apache.org/#/docs/dev/build.md?lang=zh-cn 里面找 schema 配置参考手册,就可以明白

这里说下,com.example.prom.exposeinterface 对应的目录结构,如图:

SrpingBoot + alibaba(apache) 官方 Dubbo +Zookeeper集成

我对外暴露的接口和实现类,都在这个包下。所以,直接写此包就可以了。

    5. 更改启动类

package com.example.prom;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;

@SpringBootApplication
public class PromApplication {

	public static void main(String[] args) {
		new SpringApplicationBuilder(PromApplication.class)
				.web(true) // true 表示为web工程。false 为非web工程,一般用于专门提供接口的jar
				.run(args);
	}
}
           

到这里,我们的服务提供方就可以了。

运行我们刚刚打好的 dubbo-admin war包,启动 dubbo-admin 工程,例如:127.0.0.1/dubbo-admin,

用户名和密码为:root

SrpingBoot + alibaba(apache) 官方 Dubbo +Zookeeper集成

此处改为中文

选择 服务治理-服务

此处成功展现,为发布成功。

SrpingBoot + alibaba(apache) 官方 Dubbo +Zookeeper集成

点击上图的接口,可以看到详细信息。

SrpingBoot + alibaba(apache) 官方 Dubbo +Zookeeper集成

点击 ip地址 进去。有详细信息

SrpingBoot + alibaba(apache) 官方 Dubbo +Zookeeper集成

消费者

一、将 提供者 工程打jar包,我们在这里要引用。(正式开发,只需要将暴露的接口工程打包,引用。)

    1.新建 springboot工程 

        这里注意,工程必须为1.5.x 版本,否则不可以使用。我这里是1.5.9(官方正在推出2.0.x的版本。以后也主打2.0.x以上的版本)

PS: dubbo官方现在已经支持 springboot 为2.0.x 以上版本,对应dubbo的maven依赖版本为 0.2.0

    2.导包

<!-- provider 引用 -->
<dependency>
    <groupId>com.dubbo</groupId>
    <artifactId>provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

<!-- Dubbo -->
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.1.0</version>
</dependency>

<!-- zookeeper 连接 -->
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.7</version>
</dependency>
           

3.新建一个对象,调用提供者接口

package com.dubbo.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.dubbo.provider.service.ProviderService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConsumerController {

    @Reference(
            version = "${demo.service.version}",
            application = "${dubbo.application.id}"
    )
    private ProviderService providerService;

    @RequestMapping("/")
    @Transactional
    public String getProvider() {
        String result = providerService.sayHeloo();
        return result;
    }
}
           

注解说明,参考地址:http://dubbo.apache.org/#/docs/dev/build.md?lang=zh-cn

@Reference() 里面的 version 和 application 参数为可选配置,可以不写,参考地址里有详细说明。

   4.配置文件

server:
  port: 9090
dubbo:
  application:
    name: consumer
    id: consumer
  protocol:
    name: dubbo
    port: 20881
    id: dubbo
  registry:
    address: zookeeper://xxx.xxx.xxx.xxx:2181
demo:
  service:
    version: 0
           

5.更改启动类

在@SpringBootApplication注解后,加上包扫描地址(scanBasePackages = "com.dubbo.consumer.controller")

package com.dubbo.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = "com.dubbo.consumer.controller")
public class ConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(ConsumerApplication.class, args);
	}
}
           

到这里,消费者就完成了。我们启动消费者项目。

下图总,我们可以看到消费者信息。

SrpingBoot + alibaba(apache) 官方 Dubbo +Zookeeper集成

点击 ip地址 进去。有详细信息

SrpingBoot + alibaba(apache) 官方 Dubbo +Zookeeper集成

继续阅读