SpringBoot2.X集成Dubbo+Zookeeper

SpringBoot2.X集成Dubbo+Zookeeper


前言

Dubbo的学习记录,照着官方文档的demo敲了一遍,理清整个流程的思路。

前提:

  1. 本地已安装zookeeper。(官方demo有提供自带的zookeeper,但我还是使用的本地zookeeper)
  2. 有SpringBoot基础。(至少能够用常见的注解,以及知道SpringBoot中的配置文件怎么编写)
  3. 有Maven基础。(理清项目中父依赖与子依赖的集成管理关系)
  4. 使用IDEA开发。

我使用的版本:

  1. dubbo 3.2.0-beta.4
  2. springboot 2.7.8
  3. java8 (jdk1.8)
  4. zookeeper 3.7.1

一、 搭建项目

1、新建一个Maven项目

在这里插入图片描述

2、在此项目下,右键新建3个 Moudle 模块

分别是 dubbo-spring-boot-demo-interface 提供公共接口。

dubbo-spring-boot-demo-provider 服务提供者。

dubbo-spring-boot-demo-consumer 服务消费者。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

此时,项目结构为:

在这里插入图片描述

在3个子模块的 src 路径下建立包为 com.example

二、导入需要的依赖

首先要明白项目之间的关系,一开始建立的 dubbo-spring-boot-demo为整个demo项目的父项目,它下面有3个儿子,分别是: dubbo-spring-boot-demo-interfacedubbo-spring-boot-demo-providerdubbo-spring-boot-demo-consumer

对于多模块项目,首先要添加父项目的依赖。

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.example</groupId>
    <artifactId>dubbo-spring-boot-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>dubbo-spring-boot-demo-interface</module>
        <module>dubbo-spring-boot-demo-provider</module>
        <module>dubbo-spring-boot-demo-consumer</module>
    </modules>

    <properties>
        <!--start  springboot和dubbo的版本信息-->
        <dubbo.version>3.2.0-beta.4</dubbo.version>
        <spring-boot.version>2.7.8</spring-boot.version>
        <!--end-->
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- Dubbo -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-bom</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
                <version>${dubbo.version}</version>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
            </plugin>
        </plugins>
    </pluginManagement>
    </build>

</project>

2、dubbo-spring-boot-demo-providerdubbo-spring-boot-demo-consumerpom.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>
    <parent>
        <groupId>com.example</groupId>
        <artifactId>dubbo-spring-boot-demo</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>dubbo-spring-boot-demo-provider</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>dubbo-spring-boot-demo-interface</artifactId>
            <version>${project.parent.version}</version>
        </dependency>

        <!-- dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper-curator5</artifactId>
            <type>pom</type>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-reload4j</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

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

    </dependencies>

</project>

导入完之后,点击 maven图标,全部重新加载一下。

三、编写配置文件

dubbo-spring-boot-demo-providerdubbo-spring-boot-demo-consumer 的resources目录下编写SpringBoot的配置文件 application.yml

dubbo: 
  application: 
    # name 是服务应用的名字,可以随便写,但是要注意规范
    name: dubbo-spring-boot-demo-provider
  # protocol 是dubbo进行RPC的协议
  protocol: 
    # name 是协议名称
    name: dubbo
    # port 端口号为-1,表示随机端口,随机端口对dubbo应用不影响,因为我们不需要知道它们的具体端口号
    port: -1
  registry: 
    # 服务注册中心的地址 ,我们这里使用本地zookeeper
    address: zookeeper://127.0.0.1:2181

在这个配置文件中,定义了Dubbo的应用名、Dubbo的协议信息、Dubbo的注册中心地址。

四、编写接口

dubbo-spring-boot-demo-interface 中编写接口

在这里插入图片描述

public interface DemoService {
    String sayHello(String name);
}

五、编写服务提供类

dubbo-spring-boot-demo-provider下面编写服务提供类,服务提供类实现上面的接口。

在这里插入图片描述

package com.example.impl;

import com.example.DemoService;
import org.apache.dubbo.config.annotation.DubboService;

/**
 * @Description
 * @Author Zheng
 * @CreateTime 2023/5/13 15:44
 */

//DubboService 注解是Dubbo3.0之后代替原来的Service注解
@DubboService
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello(String name) {
        return "I am a dubbo application, my name is :" + name;
    }
}

编写provider的启动类

在这里插入图片描述

package com.example;

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

/**
 * @Description
 * @Author Zheng
 * @CreateTime 2023/5/13 15:51
 */
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class,args);
    }
}

六、编写服务消费类

编写一个请求类,因为要用到网络请求,所以我们要先导入 web 依赖

dubbo-spring-boot-demo-consumerpom.xml里面导入 spring-boot-starter-web 这个依赖

        <!--导入web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

在这里插入图片描述

导完加载一下。

在controller包下,编写我们的消费者类

在这里插入图片描述

编写消费者启动类

在这里插入图片描述

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

至此,编码全部完成。

七、启动本地zookeeper

我是 windows 下启动的本地 zookeeper

在这里插入图片描述

先启动 zkServer.cmd 再启动 zkCli.cmd ,双击就行。

以下是启动后的界面

在这里插入图片描述
在这里插入图片描述

启动完毕就行了。

八、在IDEA里面先启动

先启动服务提供类,启动时长大概10s左右

当看到这一行,说明启动成功!

 [Dubbo] Current Spring Boot Application is await...

在这里插入图片描述

再去启动服务消费类

在这里插入图片描述

测试服务是否能成功调用

上面可以看见我们的服务启动在8081端口,网页上访问该请求地址

lcoalhost:8081/demo

在这里插入图片描述

成功调用!

至此,在SpringBoot里面使用Dubbo+Zookeeper的demo已完成。

附官方文档地址:https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/quick-start/spring-boot/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值