SpringBoot整合Dubbo+Zookeeper

Dubbo简介

Apache Dubbo 官网:https://dubbo.apache.org/zh/

Apache Dubbo 是一款微服务开发框架,提供了 RPC【远程过程调用 Remote Procedure Call】通信与微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。

请添加图片描述

Dubbo 提供的基础能力包括:

  • 服务发现
  • 流式通信
  • 负载均衡
  • 流量治理
  • ……

Zookeeper 简介

Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境。

在这里插入图片描述

SpringBoot 项目整合

需要搭建 Zookeeper 环境:https://blog.csdn.net/qq_20185737/article/details/122202628

示例项目分为三个模块:

  • romantik:maven 多模块聚合项目

  • common:提取公共的实体类和服务接口,普通 Java 项目

  • app:服务消费者,远程调用 service 提供的服务,SpringBoot 项目

  • service:服务提供者,common 的服务接口具体实现,SpringBoot 项目

    image-20220123095340443

父模块

在父项目的 pom.xml 用 dependencyManagement 管理 Dubbo,Zookeeper 的依赖版本

<properties>
    <java.version>1.8</java.version>
    <dubbo.version>3.0.5</dubbo.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-dependencies-zookeeper</artifactId>
            <version>${dubbo.version}</version>
            <exclusions>	//排除冲突的依赖
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

common 模块

在 common 模块的 pom.xml 中引入父项目的坐标

<parent>
    <artifactId>romantic</artifactId>
    <groupId>com.example</groupId>
    <version>1.0.0</version>
</parent>

导入 service 模块和 app 模块公共依赖,这样在 service 模块和 app 模块中添加 common 模块依赖时就会导入这些依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>
</dependencies>

service 模块

service 模块的 pom.xml 中添加对 common 模块的依赖和其他依赖的导入

<dependencies>
    <!--common依赖-->
    <dependency>
        <groupId>com</groupId>
        <artifactId>common</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

配置 Service 模块的配置文件

#数据源配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    username: root
    password: 123456

#防止端口冲突
server:
  port: 8001
  
#dubbo 配置
dubbo:
  application:
    #应用名称
    name: provider
  registry:
    #注册中心地址
    address: zookeeper://49.232.212.119:2181
    #超时时间,单位毫秒
    timeout: 30000
  #元中心地址
  metadata-report:
    address: zookeeper://49.232.212.119:2181
  protocol:
    #协议名称
    name: dubbo
    #协议端口
    port: 20880
  scan:
    #扫描服务包的位置
    base-packages: com.service.impl

app 模块

app 模块的 pom.xml 中添加对 common 模块的依赖和其他依赖的导入

<dependencies>
    <dependency>
        <artifactId>dubbo-api</artifactId>
        <groupId>com.example</groupId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

配置 app 模块的配置文件

#防止端口冲突
server:
  port: 8002
dubbo:
  application:
    #应用名称
    name: consumer
  registry:
    #注册中心地址
    address: zookeeper://49.232.212.119:2181
    timeout: 30000

测试

  1. 在 common 模块下编写 User 实体类

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User implements Serializable {
        private Integer id;
        private String username;
        private String password;
    
    }
    

    编写 User 的服务接口 UserService

    public interface UserService {
        User getUser();
    }
    
  2. 在 Service 模块中进行实现 common 模块的服务接口 UserService

    /**
     * @author Jie
     */
    @DubboService(version = "1.0")
    public class UserServiceImpl implements UserService {
    
        /**
         * 实现 UserService 的 getUser() 方法
         * @return 返回一个 User
         */
        @Override
        public User getUser() {
            return new User(20,"喵喵","123456");
        }
    
    }
    

    使用 @DubboService 注解向注册中心注册服务

  3. 在 app 中编写 controller

    @RestController
    public class UserController {
    
        @DubboReference(version = "1.0")
        private UserService userService;
    
        @RequestMapping("/user")
        public User getUser(){
            return userService.getUser();
        }
    
    }
    

    使用 @DubboReference 远程调用注册中心中的服务

  4. 启动两个模块,访问 localhost:8002/user,就可以看到执行成功了

    image-20220123110034404

    我们也可以在 dubbo-admin 中看见 Service 向注册中心注册的服务。安装 dubbo-admin 的教程:Linux 通过 Maven 安装 Dubbo-admin -CSDN博客

    image-20220123105015311

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@赵士杰

如果对你有用,可以进行打赏,感

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

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

打赏作者

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

抵扣说明:

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

余额充值