• SpringBoot整合Zookeeper和Dubbo


    一、Dubbo

       1、 Dubbo定义

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方
    式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦
    合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要
    么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象
    出服务提供方(Provider)和服务消费方(Consumer)两个角色。

    Dubbo就是资源调度和治理中心的管理工具。

    2、Dubbo架构

    节点角色说明:

    Provider: 暴露服务的服务提供方。

    Consumer: 调用远程服务的服务消费方。

    Registry: 服务注册与发现的注册中心。

    Monitor: 统计服务的调用次调和调用时间的监控中心。

    Container: 服务运行容器。

    调用关系说明:

    0. 服务容器负责启动,加载,运行服务提供者。

    1. 服务提供者在启动时,向注册中心注册自己提供的服务。

    2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

    3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

    4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

    5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    二、注册中心

    1. Zookeeper介绍

    官方推荐使用zookeeper注册中心。

    注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。使用dubbo-2.3.3以上版本,建议使用zookeeper注册中心。

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

    Zookeeper:

    1、可以作为集群的管理工具使用。

    2、可以集中管理配置文件。

    三、SpringBoot整合Dubbo

    1、新建provider模块 springboot-dubbo-server

     引入依赖

     <!-- Spring Boot 启动父依赖 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.6.RELEASE</version>
            <relativePath/>
        </parent>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--dubbo依赖-->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>0.2.0</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.spring.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>2.0.0</version>
            </dependency>
            <!--zkclient依赖-->
            <dependency>
                <groupId>com.101tec</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.10</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!--mybatis起步依赖-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.1.1</version>
            </dependency>
            <!--mysql依赖-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>

    application.properties

    #应用名称
    dubbo.application.name=provider
    #注册中心地址
    dubbo.registry.address=zookeeper://localhost:2181
    #服务类包目录
    dubbo.scan.base-packages=com.yehui.service
    ##协议名称
    #dubbo.protocol.name=dubbo
    ##协议端口
    #dubbo.protocol.port=20880
    server.port=8087
    
    
    spring.datasource.password=root
    spring.datasource.username=root
    spring.datasource.url=jdbc:mysql://localhost:3306/study
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    mybatis.mapper-locations=classpath:mapper/*.xml
    
    
    #spring.dubbo.application.name 应用名称
    #spring.dubbo.registry.address 注册中心地址
    #spring.dubbo.protocol.name 协议名称
    #spring.dubbo.protocol.port 协议端口
    #spring.dubbo.scan dubbo 服务类包目录
    #spring.dubbo.scan 扫描包

    创建接口

    public interface DubboService {
        public List<TbUser> selectList();
    }

    实现类

    @Component
    @Service
    public class DubboServiceImpl implements DubboService {
        @Autowired
        private DubboMapper dubboMapper;
        @Override
        public List<TbUser> selectList() {
            return dubboMapper.selectList();
        }
    }

    mapper接口

    @Mapper
    public interface DubboMapper {
        public List<TbUser> selectList();
    
    }

    实体类

    public class TbUser implements Serializable {
        private Integer id;
        private String username;
        private String age;

    mapper.xml

    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.yehui.mapper.DubboMapper">
        <select id="selectList" resultType="com.yehui.entity.TbUser">
             select  * from tb_user
        </select>
    </mapper>

    启动类

    @SpringBootApplication
    @EnableDubboConfiguration//注解必须有否则否则会报错
    public class DubboApplication {
        public static void main(String[] args) {
            SpringApplication.run(DubboApplication.class,args);
        }
    }

    启动zookeeper之后在启动主启动类

    2、消费者模块springboot-dubbo-client

    引入依赖

        <!-- Spring Boot 启动父依赖 这个依赖也不少 -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.6.RELEASE</version>
        </parent>
        <dependencies>
    
            <dependency>
                <groupId>com.yehui</groupId>
                <artifactId>springboot-dubbo-server</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
        </dependencies>

    application.properties文件

    ## Dubbo 服务提供者配置
    dubbo.application.name=cutomer
    dubbo.registry.address=zookeeper://192.168.1.8:2181
    
    server.port=8088
    
    spring.datasource.password=root
    spring.datasource.username=root
    spring.datasource.url=jdbc:mysql://localhost:3306/study
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    mybatis.mapper-locations=classpath:mapper/*.xml

    controller类

    @RestController
    public class DubboController {
    
        @Reference
        private DubboService dubboService;
    
        @RequestMapping("/findAll")
        public List<TbUser> findAll(){
            return dubboService.selectList();
        }
    }

    主启动类

    @SpringBootApplication
    @EnableDubboConfiguration //这个注解不能少
    public class StartAppClient {
        public static void main(String[] args) {
            SpringApplication.run(StartAppClient.class);
        }
    }

    启动主启动类测试

  • 相关阅读:
    tableau学习笔记—1
    sql学习笔记1
    rpy2的安装问题?【解决】
    python_广州房价热力图
    数据清洗记录——.图书馆学号去敏
    python argparse
    利用torch.nn实现前馈神经网络解决 多分类 任务
    R7000P Ubuntu20.04 安装 Realtek 8852 无线网卡驱动
    邻接矩阵的相乘的意义
    分类问题中评价指标
  • 原文地址:https://www.cnblogs.com/cxyyh/p/10633291.html
Copyright © 2020-2023  润新知