• 分布式技术之dubbo二


    1,课程回顾
    2,本章重点

    父子工程的使用,子工程相互调用
    springboot+mybatis+dubbo+zookeeper+mysql
    部署一个dubbo_admin治理项目(可以对提供者和消费者进行管理)
    dubbo负载均衡功能
    3,具体内容
    3.1 springboot,mybatis整合dubbo

    3.1.1创建父项目(springboot+mybatis方式创建),pom.xml引入jar:

    
      <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.5.7version>
        <relativePath/> 
      parent>
     
    
    <dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
    dependency>
    
    <dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <optional>trueoptional>
    dependency>
    
    <dependency>
    <groupId>com.alibaba.spring.bootgroupId>
    <artifactId>dubbo-spring-boot-starterartifactId>
    <version>2.0.0version>
    dependency>
    
    <dependency>
    <groupId>com.101tecgroupId>
    <artifactId>zkclientartifactId>
    <version>0.10version>
    dependency>	     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    3.1.2 创建子项目common
    创建公共的实体类和服务层接口
    3.1.3创建子项目consumer

     pom.xml
               <dependency>
                <groupId>com.aaagroupId>
                <artifactId>commonartifactId>
                <version>0.0.1-SNAPSHOTversion>
            dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    新建启动类并加入dubbo支持:

    package com.aaa.pc;
    import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.SpringBootConfiguration;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    /**
     * @ fileName:PowerConsumerApplication
     * @ description:
     * @ author:zhz
     * @ createTime:2022/1/5 9:51
     * @ version:1.0.0
     */
    @SpringBootApplication
    @EnableDubboConfiguration  //开启dubbo配置
    public class PowerConsumerApplication {
        public static void main(String[] args) {
            //run方法
            SpringApplication.run(PowerConsumerApplication.class,args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    编写controller,引入Service:

    @Reference(check=false)
    Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check=“true”.
    可以通过 check=“false” 关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。

    package com.aaa.pc.controller;
    import com.aaa.common.controller.BaseController;
    import com.aaa.common.entity.Menu;
    import com.aaa.common.service.MenuService;
    import com.aaa.common.util.Result;
    import com.alibaba.dubbo.config.annotation.Reference;
    import org.springframework.web.bind.annotation.*;
    import javax.annotation.Resource;
    import java.util.Map;
    /**
     * 菜单权限表(Menu)表控制层
     *
     * @author makejava
     * @since 2022-01-05 09:45:33
     */
    @RestController
    @RequestMapping("menu")
    public class MenuController extends BaseController {
        /**
         * 服务对象
         */
        @Reference(check = false)   //没有配置文件,直接使用引用注解
        private MenuService menuService;
        /**
         * 通过主键查询单条数据
         *
         * @param id 主键
         * @return 单条数据
         */
        @GetMapping("selectOne")
        public Result selectOne(Integer id) {
            return this.success(this.menuService.queryById(id));
        }
    
        /**
         * 添加
         *
         * @param menu
         * @return
         */
        @PutMapping("add")
        public Result add(@RequestBody Menu menu) {
            return this.success(this.menuService.insert(menu));
        }
        /**
         * 更新
         *
         * @param menu
         * @return
         */
        @PutMapping("update")
        public Result update(@RequestBody Menu menu) {
            return this.success(this.menuService.update(menu));
        }
        /**
         * 根据编号删除
         *
         * @param id
         * @return
         */
        @DeleteMapping("deleteById")
        public Result deleteById(Integer id) {
            return this.success(this.menuService.deleteById(id));
        }
    }
    application.properties:
    #访问端口号
    server.port=18090
    #dubbo - customer名称
    spring.dubbo.application.name=power_customer
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    zookeeper 注册中心

    spring.dubbo.registry.address=zookeeper://192.168.170.41:2181
    #dubbo 通信端口
    spring.dubbo.protocol.name=dubbo
    spring.dubbo.protocol.port=20881
    3.1.4创建子项目provider

    pom.xml
           <dependency>
        <groupId>com.aaagroupId>
        <artifactId>commonartifactId>
        <version>1.0-SNAPSHOTversion>
    dependency>
    <dependency>
        <groupId>org.mybatis.spring.bootgroupId>
        <artifactId>mybatis-spring-boot-starterartifactId>
        <version>2.2.0version>
    dependency>
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>5.1.10version>
    dependency>
    
    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>druidartifactId>
        <version>1.2.8version>
    dependency>
    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>druid-spring-boot-starterartifactId>
        <version>1.2.8version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    启动类加入:

    package com.aaa.pp;
    import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    /**
     * @ fileName:PowerProviderApplication
     * @ description:
     * @ author:zhz
     * @ createTime:2022/1/5 10:32
     * @ version:1.0.0
     */
    @SpringBootApplication
    @EnableDubboConfiguration
    //@EnableTransactionManagement
    public class PowerProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(PowerProviderApplication.class,args);
        }
    }
              
    编写服务实现类加入  @server 
                @com.alibaba.dubbo.config.annotation.Service
                @Service  为dubbo 注解,注解暴露服务
    application.properties:
    spring.datasource.druid.url=jdbc:mysql://localhost:3306/db_qy141
    spring.datasource.druid.username=root
    spring.datasource.druid.password=root
    spring.datasource.druid.initial-size=5
    spring.datasource.druid.max-active=20
    spring.datasource.druid.min-idle=10
    spring.datasource.druid.max-wait=10
    #端口号
    server.port=19090
    #dubbo 服务名称
    spring.dubbo.application.name=power_provider
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    zookeeper 注册中心

    spring.dubbo.registry.address=zookeeper://192.168.170.41:2181
    #zookeeper 通信端口
    spring.dubbo.protocol.name=dubbo
    spring.dubbo.protocol.port=20881
    3.2 服务治理
    3.2.1 多台zk集群
    前面配置过,直接启动
    3.2.2 配置治理项目,并且测试
    配置tomcat
    tar -xzvf /root/software/apache-tomcat-9.0.52.tar.gz -C /usr/
    vim /etc/profile
    修改为:

    export PATH=$PATH:$JAVA_HOME/bin:$ZK_HOME/bin:/usr/apache-tomcat-9.0.52/bin
    
    • 1

    生效:
    source /etc/profile
    startup.sh
    查看是否启动成功
    jps 或者 ps -ef |grep tomcat |grep -v grep
    jps 可以看到Bootstrap进程
    复制准备好dubbo-admin项目到tomcat下
    使用xft 把dubbo-admin.war上传到/usr/apache-tomcat-9.0.52/webapps/
    修改配置
    vim /usr/apache-tomcat-9.0.52/webapps/dubbo-admin/WEB-INF/dubbo.properties
    修改第一行:
    127.0.0.1 修改为 192.168.xxx.41 (zk所在的机子IP)
    启动zk集群:
    /root/shelldir/zk-start-stop.sh
    测试
    http://192.168.170.41:8080/dubbo-admin/
    3.2.3 启动提供者和消费者,查看admin项目变化
    图片: https://uploader.shimo.im/f/ySDnC68dAUNxYo9c.png图片:
    https://uploader.shimo.im/f/FDhixvC9OZ2yRb8W.png

    3.3 负载均衡,集群容错, 服务降级(半权) 路由规则,动态配置,访问控制,权重调节
    打包生成多个服务:
    图片: https://uploader.shimo.im/f/IiRUcBBdrK7b9UNQ.png

    图片: https://uploader.shimo.im/f/kprUjYYTV3hS6eFF.png

    图片: https://uploader.shimo.im/f/2qoOKsb8eqKh7QMn.png

    图片: https://uploader.shimo.im/f/wDCF90FmVJ8sMqRK.png

    cd soft/
    使用xftp 把provider_jar上传
    cd provider_jar/
    java -jar
    java -jar provider.jar
    运行出错:slf4j-log4j12-1.7.26.jar
    修改META-INF/MANIFEST.MF文件,删除slf4j-log4j12-1.7.26.jar包,再次打包运行
    再次rebuild 时,要再次修改META-INF/MANIFEST.MF 文件中多余的jar
    图片: https://uploader.shimo.im/f/11aeRlxJb1eGKqL5.png

    图片: https://uploader.shimo.im/f/7Aa3F3g0E4g8u0To.png

    图片: https://uploader.shimo.im/f/TQRlmlHPby5nGMjP.png

    图片: https://uploader.shimo.im/f/LxqKzO8dexFkDSS5.png

    4,知识点总结
    5,本章面试题

  • 相关阅读:
    Java虚拟机栈
    DS:八大排序之堆排序、冒泡排序、快速排序
    5款免费的项目管理软件(推荐收藏)
    RK3399驱动开发 | 13 - AP6356 SDIO WiFi 调试(基于linux4.4.194内核)
    Java开发 - Canal进阶之和Redis的数据同步
    Linux常用命令
    数据库SQL语句执行知识
    牛客刷题总结——Python入门:列表数据类型
    解锁学习新方式——助您迈向成功之路
    小鱼送激光雷达啦 | 恰饭即抽奖第一期
  • 原文地址:https://blog.csdn.net/zhangchen124/article/details/125890641