SpringBoot整合dubbo2.7.8+zookeeper3.4.14

1,060 阅读5分钟

本篇大概算是dubbo和zookeeper一个非常入门的整合,目的是对dubbo和zookeeper有一个初步的认识!

项目下载地址:download.csdn.net/download/ba…

zookeeper:分布式的远程服务注册中心。

dubbo:远程服务调度框架。

上面是对这两者一个非常简要的概括(可能不够准确),简单的单机部署步骤:

  1. 将zookeeper安装在服务器上,并启动;
  2. 项目中添加dubbo和zookeeper等相关依赖,并配置dubbo的相关属性;
  3. 创建服务提供者;
  4. 创建服务消费者;

首先,为了方便服务消费者对提供者的调度,我们创建一个多moudle的项目(顺便也是对多moudle项目的一个初步认识):

1.创建父moudle,New Project,选择Spring initializr,并添加web模块:

在这里插入图片描述

2.创建成功后,删除src文件夹,并在pom.xml中添加packaging属性:

在这里插入图片描述

3.添加moudle,选择maven:

在这里插入图片描述

Parent选择你最初创建的父moudle:

在这里插入图片描述

其它moudle同上,最终项目结构为:

在这里插入图片描述

打开根目录下的pom.xml,发现moudle已经全部自动添加进去:

在这里插入图片描述

上面仅仅是比较简单的分模块划分例子: common:一些共用的工具,或实现某些功能的第三方库; dao:持久化层,可以是jpa或mybatis,用于操作数据库; service:服务层; web:项目启动模块,包含controller以及web页面、功能相关(当然,controller也可以提出来);

此时,这些模块之间并没有什么联系,如果需要关联,就需要创造依赖关系,该例子依赖关系为: dao依赖common,service依赖dao,web依赖service:

dao下的pom.xml:

    <dependencies>
        <dependency>
            <groupId>com.blog</groupId>
            <artifactId>byl-common</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

service下的pom.xml:

    <dependencies>
        <dependency>
            <groupId>com.blog</groupId>
            <artifactId>byl-dao</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

web下的pom.xml:

    <dependencies>
        <dependency>
            <groupId>com.blog</groupId>
            <artifactId>byl-service</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

在web的src文件夹下创建包以及启动类:

在这里插入图片描述

@SpringBootApplication(scanBasePackages = "com.blog")
public class WebApplication {
    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }
}

scanBasePackages 一定不要忘了加,“com.blog”即groupId!

为了测试依赖关系是否正确,我们可以在common模块下创建一个Utils类,并在web模块下调用:

在这里插入图片描述

一般的,只要引用成功,说明已经没问题了,现在可以运行一下:

在这里插入图片描述

OK,运行成功,我们现在来部署zookeeper,本文中使用的zookeeper版本为3.4.14(最新版目前为3.6.2),下载链接:archive.apache.org/dist/zookee…

我们测试时,可以先部署到本地,本例在windows环境下:

1.解压压缩包:

在这里插入图片描述

2.打开conf文件夹,并复制一份zoo_sample.cfg重命名为zoo.cfg,并打开修改和添加:

dataDir=E:\zookeeper-3.4.14\data
dataLogDir=E:\zookeeper-3.4.14\log

路径均为zookeeper根目录,data和log文件夹自行创建!

3.进入bin目录,直接双击运行zkServer.cmd,启动zookeeper!(linux部署步骤基本一样)

在这里插入图片描述

zookeeper运行成功后,我们开始在项目中创建服务提供者,本例中service模块会作为服务提供者,而web模块则作为服务消费者(注意:项目中的common和dao基本没用,仅仅是为了测试多模块项目构建)!

打开根目录的pom.xml,添加dubbo和zookeeper相关依赖(因为本人也是初步使用,对doubbo和zookeeper的配置,网上的案例五花八门,各种版本,各种写法都有,真真的没一个管用...本例也是经过不少时间摸索,才成功运行):

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

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.8</version>
        </dependency>

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

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

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
        </dependency>

curator和zkclient都是zookeeper客户端,这里选用了curator,有些案例中既有curator又有zkclient,而且版本号五花八门,初学者很容易头晕!

进入service模块,先在resources文件夹下,创建配置文件application.properties,再在src文件夹下创建包及Service:

interface:

public interface TestProviderService {
    String testProvider();
}

impl:

import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;

@Component
@DubboService
public class TestProviderServiceImpl implements TestProviderService {
    @Override
    public String testProvider() {
        return "我是服务提供者";
    }
}

注意,必须用@DubboService注解,来注册Service!

此时,打开application.properties,配置dubbo: (zookeeper上面已经安装并启动成功,服务地址即本地ip+端口号2181)

#dubbo应用名称(自定义)
dubbo.application.name=byl_blog_service
dubbo.registry.protocol=zookeeper
#zookeeper服务地址,本地IP:2181
dubbo.registry.address=zookeeper://192.168.1.95:2181
#固定/默认
dubbo.protocol.name=dubbo
#dubbo端口占用时可以修改
dubbo.protocol.port=20880
#需要扫描的远程服务所在的包名
dubbo.scan.base-packages=com.byl.service

为了避免与端口8080冲突,我们最好再配置一下服务端口号:

server.port=8081

创建启动类并启动服务提供者:

在这里插入图片描述

如果运行不报错,并出现下面log,则表示服务提供者运行成功(服务注册成功)!

在这里插入图片描述

此时,我们可以通过dubbo管理后台dubbo-admin去查看服务信息,大家可以自行下载一个dubbo-admin的war包,或者去官方gitbub上运行最新的dubbo-admin,本例中使用的是dubbo-admin-2.5.3.war!

下载成功后,部署到tomcat下:

在这里插入图片描述

启动tomcat,并打开浏览器输入:http://localhost:8080/dubbo-admin-2.5.3/

在这里插入图片描述

默认用户名和密码都为root,登录成功后:

在这里插入图片描述

输入我们创建的远程服务全路径:com.blog.service.TestProviderService,并搜索:

在这里插入图片描述

成功显示提供者:192.168.1.95:20880!

此时,打开web模块,也就是服务消费者,准备测试一下这个远程服务:

创建一个controller: 在这里插入图片描述

@RestController
@RequestMapping("/test")
public class TestController {

    @DubboReference
    TestProviderService testProviderService;

    @GetMapping("/test")
    public String test() {
        String str = testProviderService.testProvider();
        return str;
    }

}

注意:必须用@DubboReference注解,引用该服务!

配置application.properties:

server.port=8082
dubbo.application.name=byl_blog_web
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://192.168.1.95:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

运行WebApplication,在浏览器输入:http://localhost:8082/test/test 在这里插入图片描述 成功调用!

此时再查看dubbo-admin的消费者: 在这里插入图片描述 完美运行!

需要注意的是,服务提供者一定要先运行,服务注册成功后,再运行服务消费者,另外,各端口号要注意不要冲突!

项目下载地址:download.csdn.net/download/ba…