SpringBoot整合dubbo2.7.8+zookeeper3.4.14

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

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

dubbo:远程服务调度框架。

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

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

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

1.创建父moudle,New Project,选择Spring initializr,并添加web模块:
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第1张图片
2.创建成功后,删除src文件夹,并在pom.xml中添加packaging属性:
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第2张图片
3.添加moudle,选择maven:

SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第3张图片
Parent选择你最初创建的父moudle:
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第4张图片
其它moudle同上,最终项目结构为:
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第5张图片
打开根目录下的pom.xml,发现moudle已经全部自动添加进去:

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

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

dao下的pom.xml:

    <dependencies>
        <dependency>
            <groupId>com.bloggroupId>
            <artifactId>byl-commonartifactId>
            <version>1.0.0version>
        dependency>
    dependencies>

service下的pom.xml:

    <dependencies>
        <dependency>
            <groupId>com.bloggroupId>
            <artifactId>byl-daoartifactId>
            <version>1.0.0version>
        dependency>
    dependencies>

web下的pom.xml:

    <dependencies>
        <dependency>
            <groupId>com.bloggroupId>
            <artifactId>byl-serviceartifactId>
            <version>1.0.0version>
        dependency>
    dependencies>

在web的src文件夹下创建包以及启动类:
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第7张图片

@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模块下调用:
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第8张图片
一般的,只要引用成功,说明已经没问题了,现在可以运行一下:
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第9张图片
OK,运行成功,我们现在来部署zookeeper,本文中使用的zookeeper版本为3.4.14(最新版目前为3.6.2),下载链接:http://archive.apache.org/dist/zookeeper/

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

1.解压压缩包:

SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第10张图片
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部署步骤基本一样)

SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第11张图片
zookeeper运行成功后,我们开始在项目中创建服务提供者,本例中service模块会作为服务提供者,而web模块则作为服务消费者(注意:项目中的common和dao基本没用,仅仅是为了测试多模块项目构建)!

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

        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubbo-spring-boot-starterartifactId>
            <version>2.7.8version>
        dependency>

        <dependency>
            <groupId>org.apache.dubbogroupId>
            <artifactId>dubboartifactId>
            <version>2.7.8version>
        dependency>

        <dependency>
            <groupId>org.apache.curatorgroupId>
            <artifactId>curator-frameworkartifactId>
            <version>4.2.0version>
        dependency>

        <dependency>
            <groupId>org.apache.curatorgroupId>
            <artifactId>curator-recipesartifactId>
            <version>2.8.0version>
        dependency>

        <dependency>
            <groupId>org.apache.zookeepergroupId>
            <artifactId>zookeeperartifactId>
            <version>3.4.14version>
        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

创建启动类并启动服务提供者:
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第12张图片
如果运行不报错,并出现下面log,则表示服务提供者运行成功(服务注册成功)!
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第13张图片
此时,我们可以通过dubbo管理后台dubbo-admin去查看服务信息,大家可以自行下载一个dubbo-admin的war包,或者去官方gitbub上运行最新的dubbo-admin,本例中使用的是dubbo-admin-2.5.3.war!

下载成功后,部署到tomcat下:
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第14张图片
启动tomcat,并打开浏览器输入:http://localhost:8080/dubbo-admin-2.5.3/

SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第15张图片
默认用户名和密码都为root,登录成功后:
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第16张图片
输入我们创建的远程服务全路径:com.blog.service.TestProviderService,并搜索:
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第17张图片
成功显示提供者:192.168.1.95:20880!

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

创建一个controller:
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第18张图片

@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
SpringBoot整合dubbo2.7.8+zookeeper3.4.14_第19张图片
成功调用!

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

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

项目下载地址:https://download.csdn.net/download/baiyuliang2013/14945043

你可能感兴趣的:(SpringBoot,dubbo,zookeeper)