最简单的Dubbo案例之三:dubbo实现服务提供者+消费者,SpringBoot + dubbo + zookeeper

本文提供了一个最简单的Dubbo项目搭建教程,使用SpringBoot、Dubbo和Zookeeper,创建服务提供者和消费者。详细介绍了每个模块的配置,包括Zookeeper的安装启动,服务提供者SayProvider和消费者SayConsumer的实现,以及如何通过Web接口测试调用服务。
摘要由CSDN通过智能技术生成

目录

 1. 概述

2. 项目结构

3. zookeeper的安装和启动

4. dubbo3 父项目

4.1. pom.xml文件

5. SayProvider 服务提供者模块

5.1. pom.xml文件

5.2. application.yml 配置文件

5.3. AppMain springboot主类

5.4. SayService 接口文件

5.5. SayServiceImpl 实现类文件

6. SayConsumer 服务消费者项目

6.1. 项目结构

6.2.  pom.xml文件

6.3. application.yml 文件

6.4. AppMain SpringBoot主类文件

6.5. SayService 接口文件

6.6 SayController 文件

7. 启动测试

7.1. 启动 zookeepr

7.2. SayProvider 启动

7.3. SayConsumer 启动

7.4. 测试

8. 结尾的话


 1. 概述

本文可能是网上能找到的最简单的 dubbo 项目搭建的资料

本文是针对 dubbo 入门者的文章,dubbo初学者都不必看这篇文章。

本文旨在帮助 dubbo 入门者快速的理解dubbo是如何使用的,因此放弃了所有不必要的技术,只单纯的基于 springboot+dubbo+zookeeper 实现了服务生产者和消费者的开发。

本文的技术栈包括 maven + springboot + dubbo + zookeeper

本文开发的 dubbo服务提供者提供了一个接口,只有一个方法 String sayHi(String uname) ,服务消费者调用这个接口的时候,传入 uname用户姓名,将返回 08:51:54 :: Hello , uname!!! 这样的字符串。

功能就是这么简单,咋地!!!就是为了提供最单纯的 dubbo 入门项目!!

本文是 最简单Dubbo案例三部曲之三,前两篇为:

最简单的Dubbo案例之一:dubbo实现服务提供者+消费者,无zookeeper方式点对点直连_cuipy的博客-CSDN博客

最简单的Dubbo案例之二:dubbo实现服务提供者+消费者,SpringBoot + dubbo 无zookeeper方式点对点直连_cuipy的博客-CSDN博客

2. 项目结构

结构见下图:

与前两篇类似,本项目也是基于maven 搭建的,首先做了一个dubbo3 作为 parent 项目,然后其下放了两个模块,分别为 dubbo的服务提供者和服务消费者

3. zookeeper的安装和启动

本项目需要启动 zookeeper 作为注册中心,因此,需要安装和启动 zookeeper。

关于 zookeeper 的安装我就不详细赘述了,网上资料很多。

本文的开发环境是在 windows下,我直接下载了 zookeeper 官方的bin 压缩包解压就可以使用了,并不需要安装。我下载的版本是 zookeeper 3.7.0 .

注意要自行配置一下 zoo.cfg 文件,该文件默认不存在,有一个 example 文件在 conf/zoo_example.cfg ,可以根据这个文件进行修改。具体的配置方法我就不赘述了,可自行百度。

为了方便调用 zookeeper的命令,请将 bin 文件夹配置到环境变量 PATH

最后启动: 在Linux下启动使用 zkServer.sh start 命令,而 windows下我尝试应该直接使用 zkServer ,其实指向的是  bin/zkServer.cmd 文件。

4. dubbo3 父项目

首先我们看看 dubbo3 父项目

这个项目没别的,就是一个pom.xml文件,这个项目目的就是管理子项目的通用依赖。

4.1. pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.pingbu</groupId>
    <artifactId>dubbo3</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
    </properties>

    <modules>
        <module>SayProvider</module>
        <module>SayConsumer</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
    </parent>

    <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.6.1</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.11</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>5.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>5.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-x-discovery</artifactId>
            <version>5.1.0</version>
        </dependency>

    </dependencies>


</project>

依赖中加入了 zookeeper、 zkclient 以及 curator 等依赖,这些依赖不赘述了,网上资料很多。

5. SayProvider 服务提供者模块

先看看项目结构,如下图:

结构很简单,只提供了几个文件:

pom.xml文件: 不赘述

application.yml文件:不赘述

AppMain 类文件: 不赘述

SayService接口文件: 这是服务提供者的接口,该接口就提供了一个方法 sayHi,调用该方法将返回 08:51:54 :: Hello , 天堂!!! 这样的字符串。

SayServiceImpl 接口实现类文件: 实现 SayService 接口。

接下来就一个文件捋捋。

5.1. pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.pingbu</groupId>
        <artifactId>dubbo3</artifactId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>SayProvider</artifactId>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
    </dependencies>

</project>

 依赖中加入了 spring-boot-start ,而没有 web 相关的东西,这个项目不需要 web ,dubbo 与 web无关,因此尽可能选择 简单 、单纯的 spring启动方式。

5.2. application.yml 配置文件

dubbo:
  application:
    name: sayProvider
    owner: pingbu
  monitor:
    protocol: registry
  registry:
    address: zookeeper://127.0.0.1:2181

这个文件只对 dubbo 进行了一些配置,网上的大多数资料都是将这些配置项放在 xml 文件中,很少有针对 spring-boot 的配置说明,我在本项目中针对 spring-boot 做了移植。

dubbo.application : 主要是配置dubbo的服务名称,这个服务名称是注册到注册中心的名称,我们需要的注册中心就是 zookeeper。 

dubbo.registry.address: 指向的是 zookeeper ,就是在前文安装和启动的那个 zookeeper ,具体的ip和port 自行调整。

5.3. AppMain springboot主类

package com.pingbu.dubbo2;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class AppMain {

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

}

注意,这里增加了 @EnableDubbo 注解。

5.4. SayService 接口文件

简单的令人发指

package com.pingbu.dubbo2.provider;

public interface SayService {
    String sayHi(String uname);
}

5.5. SayServiceImpl 实现类文件

package com.pingbu.dubbo2.provider;

import org.apache.dubbo.config.annotation.DubboService;
import java.text.SimpleDateFormat;
import java.util.Date;


@DubboService(version = "1.0.0",timeout = 3000)
public class SayServiceImpl implements SayService {

    @Override
    public String sayHi(String uname){

        SimpleDateFormat sdf =new SimpleDateFormat("HH:mm:ss");
        String time1 = sdf.format(new Date());

        return  time1+" :: Hello , "+uname ;
    }

}

可以看到,这里做了一个 @DubboService 注解,这是暴露 dubbo 接口服务的。

这就是 服务提供者的全部。

6. SayConsumer 服务消费者项目

本项目将消费 SayProvider 的服务。

本模块继承自 dubbo3 项目

6.1. 项目结构

可以看到,只有5个文件

pom.xml 文件: 不解释

application.yml 文件: 不解释

AppMain SpringBoot 主类文件: 不解释

SayService 接口文件: 对应服务提供者的接口文件,包名、接口名、方法名,必须都一样。

SayController 文件:目的是通过web 方式进行 dubbo 服务调用的测试。

6.2.  pom.xml文件

代码如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>dubbo3</artifactId>
        <groupId>com.pingbu</groupId>
        <version>1.0.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>SayConsumer</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>


</project>

为了方便测试,引入了springboot的web依赖,并非 dubbo 的依赖要求。

6.3. application.yml 文件

代码如下:

server:
  port: 8086

dubbo:
  application:
    name: SayConsumer
    owner: pingbu
  registry:
    address: zookeeper://127.0.0.1:2181

dubbo.application: 配置服务名称,目的是注册到 zookeeper中,必须唯一。

dubbo.registry.address: 指向注册中心,即 zookeeper 的地址。

6.4. AppMain SpringBoot主类文件

package com.pingbu.dubbo2;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class AppMain {

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

}

增加了 @EnableDubbo 注解

6.5. SayService 接口文件

package com.pingbu.dubbo2.provider;

public interface SayService {
    String sayHi(String uname);
}

6.6 SayController 文件

package com.pingbu.dubbo2.controller;

import com.pingbu.dubbo2.provider.SayService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/say")
public class SayController {

    @DubboReference(version = "1.0.0" , check = false)
    private SayService sayService;

    @GetMapping(value = "/hi")
    public String hi(){

        String res = sayService.sayHi("天堂!!!");

        return res ;
    }


}

关键是 @DubboReference 注解,这个注解将的到 服务提供者的对象。

消费者的代码就这些了。

7. 启动测试

7.1. 启动 zookeepr

windows下启动: 执行 zookeeper安装路径/bin/zkServer.cmd 文件即可

 Linux下启动: 执行 zkServer.sh start 命令即可

必要的环境变量的配置不赘述。

7.2. SayProvider 启动

在 SayProvider根路径下,执行 mvn clean spring-boot:run ,启动成功。

7.3. SayConsumer 启动

在 SayConsumer根路径下,执行 mvn clean spring-boot:run ,启动成功。

7.4. 测试

打开浏览器,访问地址: http://127.0.0.1:8086/say/hi

在页面看到下面的内容,即说明执行成。

8. 结尾的话

 至此,这一系列3篇文章就都写完了,希望对您有帮助,也是为了给自己记录一下笔记。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小崔爱读书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值