快速搭建-分布式远程调用框架搭建-dubbo+zookper+springboot demo 演示

举报
ksh1998 发表于 2022/05/21 00:16:43 2022/05/21
【摘要】 文章目录 简介zookeeper安装环境准备 dubbo-admin(源码jar运行)安装环境准备和运行 dubbo-admin(docker) 安装环境准备和运行 demo 演示(d...

简介

https://dubbo.apache.org/zh/docsv2.7/user/preface/background/

什么是dubbo

Apache Dubbo 是一款高性能,轻量级的开源java RPC框架,它提供了三大核心能力:

  1. 面向接口的远程调用
  2. 智能容错和负载均衡
  3. 服务注册和服务
  4. 调用过程
    在这里插入图片描述

远程通信框架(RPC)

  1. provider 服务提供者
  2. consumer 服务消费者
  3. registry 注册中心
  4. monitor 监测中心

什么是zookeeper

  1. 服务注册中心

zookeeper安装

环境准备

  1. 下载zookeeper安装包

​ https://zookeeper.apache.org/releases.html zookeeper 官网下载地址 3.5.9 以上

https://archive.apache.org/dist/zookeeper/ 老版本下载地址 3.3.3-3.8.0

在这里插入图片描述

3.4.14 版本下载直通车:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/
在这里插入图片描述

上传到Linux服务器
在这里插入图片描述

  1. 解压:

    tar zxvf zookeeper-3.4.14.tar.gz 
    
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zRMLrzgx-1652948185350)(../../../typora-user-images/image-20220518164840991.png)]

  1. 启动

    1 ,复制 conf 文件夹下面的 zoo_sample.cfg 改名为 zoo.cfg 即可。因为没有配置文件,zookeeper 无法启动
    2 创建 dataDir 的临时目录  mkdir -p /tmp/zookeeper
    3 ,启动  sh zkServer.sh start
    

    启动成功:ps aux|grep zookeeper

在这里插入图片描述

  1. 开放防火墙端口 2181

    1 开放2181 端口
      1.1 查看已经开发的端口 ,避免端口冲突
       firewall-cmd --list-ports 
      1.2 开放2181 端口
      firewall-cmd --zone=public --add-port=2181/tcp --permanent
    2 重启防火墙 使用规则生效
    	firewall-cmd --reload 
    2(因为我使用的是腾讯云,所以还得把腾讯云的控制台防火墙端口放开 21
    
  2. 使用zkCli.sh 测试

    1. ls / 列出zookeeper 根下保存的所有节点

      1. 使用客户端链接zookeeper

        sh zkCli.sh

      ls /
      

在这里插入图片描述

  1. 创建一个节点

    create -e /kangshihang 123  //创建一个kangshihang 节点  值为 123
    

在这里插入图片描述

  1. 获取指定节点 值

    get /kangshihang
    

在这里插入图片描述

dubbo-admin(源码jar运行)安装

dubbo本身并不是一个服务软件。它其实就是一个jar包,能够帮助你的java程序链接到zookeeper ,利用zookeeper消费,提供服务。

但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化界面 dubbo-admin,这个只是用来管理的 dubbo服务的,不安装也不影响使用。

环境准备和运行

下载 源码进行 手动打成jar 包

  1. 下载地址 https://github.com/apache/dubbo-admin/tree/master

    拉取 master-0.2.0 分之下代码进行打包

在这里插入图片描述

  1. idea 打开此项目-打包成jar包

在这里插入图片描述

  1. 修改配置文件 application.properties 指定zookeeper 地址

在这里插入图片描述

4.后台运行jar包

nohup java -jar dubbo-admin-0.0.1-SNAPSHOT.jar >dubbo-admin.log 2>&1 &

在这里插入图片描述

5.测试访问管理页面

默认用户名:root

默认密码:root

注意:如果目前可用内存低于1G,可能会导致。dubbo-admin 运行一段时间后 进程自杀,这种情况可以使用Swapp 开启交换内存来解决。

在这里插入图片描述

dubbo-admin(docker) 安装

环境准备和运行

  1. 搜索镜像
docker search dubbo-admin

stars 星的数越多,说明被使用的次数多。 [外链图片转存失败,源站可能有在这里插入图片描述

  1. 下载最新版 镜像

    docker pull apache/dubbo-admin
    
  2. 运行镜像

    // 待更新
    

demo 演示(dubbo+zookeeper+springBoot)

服务生产者

  1. 新建项目步骤

    1. 新建空项目
    2. 新建provider-server spingboot模块
    3. 新建 cousumer-server springboot 模块
  2. 导入pom依赖

    导入 版本选择 里的对应pom依赖即可

  3. 配置文件-配置dubboh和zookeeper

    server.port=8001
    # 服务应用名字
    dubbo.application.name=provider-server
    # 注册中心
    
    dubbo.registry.address=zookeeper://124.222.227.132:2181?timeout=60000
    ## 那些服务被注册
    dubbo.scan.base-packages=com.kuang.service
    
    
    
  4. 售票业务

服务消费者

  1. 新建项目

  2. 导入pom依赖

    导入 版本选择 里的对应pom依赖即可

  3. 配置文件-配置dubboh和zookeeper

    server.port=8002
    # 服务应用名字
    dubbo.application.name=consumer-server
    # 注册中心
    dubbo.registry.address=zookeeper://124.222.227.132:2181?timeout=60000
    
    
  4. 用户业务

  5. 调用远程 服务方法 @Reference 引用远程服务

spring @service 和dubbo @service 注解区别

  1. spring 的service注解用于把对象注入到ioc容器
  2. dubboservice 注解用于将服务注册到 zookeeper服务上

版本选择

服务端对应 zookeeper 版本

​ version: 3.4.14

在这里插入图片描述

  1. springboot

    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.6.7</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
  2. dubbo

      <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>2.7.13</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-registry-zookeeper</artifactId>
                <version>2.7.13</version>
            </dependency>
    
  3. zookeeper

      <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.14</version>
                <!--排除slf4j-log4j12-->
                <exclusions>
                    <exclusion>
                      <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-log4j12</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
  4. zckclint

    <!--zookeeper客户端-->
            <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
            </dependency>
    
  5. curator

     <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>4.2.0</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.zookeeper</groupId>
                        <artifactId>zookeeper</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    

问题

解决日志冲突

SLF4J: Class path contains multiple SLF4J bindings.

在这里插入图片描述

解决方案

排除冲突的日志

  <!--zookeeper 服务端-->
         <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除slf4j-log4j12-->
            <exclusions>
                <exclusion>
                  <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

测试用例

@SpringBootTest
@RunWith(SpringRunner.class)
class ConsumerServerApplicationTests {

    @Autowired
    private UserService userService;
    @Test
    void contextLoads() {
        String providerTicket = userService.getProviderTicket();
        System.out.println(providerTicket);
    }

}

测试pom依赖

<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

测试结果

在这里插入图片描述

文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。

原文链接:kangshihang.blog.csdn.net/article/details/124865705

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。