Spring Boot 整合Dubbo + Zookeeper 实现分布式 消费者与服务者的业务调用

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

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

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

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

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

二、什么是RPC?

============================================================================

RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

☎️RPC基本原理


示意图

在这里插入图片描述

详细版本

在这里插入图片描述

RPC两个核心模块:序列化和通讯

三、Dubbo的特点及好处

================================================================================

Apache Dubbo |ˈdʌbəʊ| 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。

在这里插入图片描述

Dubbo的注册中心


Dubbo的注册中心有很多种,但官方推荐使用Zookeeper,其余有Redis、Multicast、Simple注册中心。



Dubbo网络通信框架


Dubbo 默认使用 Netty 框架,也是推荐的选择,另外内容还集成有Mina、Grizzly。



四、Zookeeper是什么?

==================================================================================

顾名思义 zookeeper 就是动物园管理员,他是用来管 hadoop(大象)、Hive(蜜蜂)、pig(小 猪)的管理员, Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper;Zookeeper: 是一个分布式的、开源的程序协调服务,是 hadoop 项目下的一个子项目。他提供的主要功 能包括:配置管理、名字服务、分布式锁、集群管理。

五、搭建Zookeeper注册中心

====================================================================================

♻️安装Zookeeper


访问Zookeeper官网下载

下载Zookeeper

在这里插入图片描述

下载 压缩包格式的zookeeper

将下载的文件解压缩

在这里插入图片描述

✅启动Zookeeper


从cmd窗口进入Zookeeper文件夹下的bin目录,执行zkServer.cmd启动

在这里插入图片描述

如果报错提示 zoo.cfg缺失,那就进入zookeeper的conf文件夹下将zoo_sample.cfg复制一份改名为zoo.cfg即可

再次重启则成功

六、搭建Dubbo管理控制台

=================================================================================

✒️克隆dubbo-admin 项目


从 github打开项目 dubbo-admin

dubbo-admin

从GitHub爬取项目教程如下:

使用 Git爬取 GitEE、GitLab、GitHub项目的教程

✅运行dubbo-admin


dubbo-admin采用前后端分离的形式管理项目

爬取文件如下

在这里插入图片描述

♨️部署dubbo-admin-server

运行后端项目必须启动 zookeeper,否则启动失败

cmd窗口进入dubbo-admin-server,执行以下命令


mvn clean package



打包部署项目

在这里等大概5分钟左右即可部署完成

部署完成后生成target目录

在这里插入图片描述

cmd窗口进入target目录执行以下命令


java -jar dubbo-admin-server-0.4.0.jar



后端项目运行成功~

♨️部署dubbo-admin-ui

在这里需要有 node 环境

教程如下

GitHub爬取项目并部署前端工程

cmd窗口进入dubbo-admin-ui,执行以下命令下载依赖


npm install



下载完毕后,执行启动命令


npm run dev



启动成功

在这里插入图片描述

Ⓜ️进入Dubbo管理控制台


访问前端生成的本地地址

在这里插入图片描述

默认用户名密码均为root

输入即可登录成功

在这里插入图片描述

✈️踩坑记录


后端的地址必须和前端工程vue.config.js下的target路径一样,否则404!

在这里插入图片描述

七、SpringBoot 整合Dubbo + Zookeeper

===================================================================================================

✉️项目简介


基于SpringBoot项目整合Dubbo + Zookeeper 实现消费者消费服务提供者的服务

消费者为订单模块,传入用户id去查询用户模块的用户信息,实现远程RPC调用服务,分布式调用,而不是单体架构

服务提供者为用户模块,返回用户信息

♻️项目结构图


在这里插入图片描述

  1. 父工程:dubbo-boot

  2. 公共API(接口及实体类):GmallPublicInterafce

  3. 服务提供者:UserServiceProvider

  4. 服务消费者:OrderServiceConsumer

⏰效果图


在这里插入图片描述

✴️核心源码


🚃父级工程 dubbo-boot

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>



    <!-- 整体引入springboot工程 -->

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>2.5.5</version>

        <relativePath/> <!-- lookup parent from repository -->

    </parent>



    <groupId>org.example</groupId>

    <artifactId>dubbo-boot</artifactId>

    <packaging>pom</packaging>

    <version>1.0-SNAPSHOT</version>

    <!-- 子模块 -->

    <modules>

        <module>GmallPublicInterface</module>

        <module>UserServiceProvider</module>

        <module>OrderServiceConsumer</module>

    </modules>



    <properties>

        <maven.compiler.source>8</maven.compiler.source>

        <maven.compiler.target>8</maven.compiler.target>

    </properties>



</project>



🚃公共API模块 GmallPublicInterface

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">

    <parent>

        <artifactId>dubbo-boot</artifactId>

        <groupId>org.example</groupId>

        <version>1.0-SNAPSHOT</version>

    </parent>

    <modelVersion>4.0.0</modelVersion>



    <artifactId>GmallPublicInterface</artifactId>



    <properties>

        <maven.compiler.source>8</maven.compiler.source>

        <maven.compiler.target>8</maven.compiler.target>

    </properties>



    <dependencies>

        <!-- 引入dubbo -->

        <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->

        <dependency>

            <groupId>com.alibaba</groupId>

            <artifactId>dubbo</artifactId>

            <version>2.6.2</version>

        </dependency>



        <!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端 -->

        <dependency>

            <groupId>org.apache.curator</groupId>

            <artifactId>curator-framework</artifactId>

            <version>2.12.0</version>

        </dependency>



        <dependency>

            <groupId>com.alibaba.boot</groupId>

            <artifactId>dubbo-spring-boot-starter</artifactId>

            <version>0.2.0</version>

        </dependency>

    </dependencies>



</project>



还有一些核心的接口及实体类

🚃服务提供者模块 UserServiceProvider

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">

    <parent>

        <artifactId>dubbo-boot</artifactId>

        <groupId>org.example</groupId>

        <version>1.0-SNAPSHOT</version>

    </parent>



    <modelVersion>4.0.0</modelVersion>



    <artifactId>UserServiceProvider</artifactId>



    <properties>

        <maven.compiler.source>8</maven.compiler.source>

        <maven.compiler.target>8</maven.compiler.target>

    </properties>



    <dependencies>



        <dependency>

            <groupId>org.example</groupId>

            <artifactId>GmallPublicInterface</artifactId>

            <version>1.0-SNAPSHOT</version>

        </dependency>



        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>



    </dependencies>



    <build>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>



        <resources>

            <resource>

                <directory>src/main/java</directory>

                <includes>

                    <include>**/*.xml</include>

                </includes>

                <filtering>false</filtering>

            </resource>

            <resource>

                <directory>src/main/resources</directory>

            </resource>

            <resource>

                <directory>libs/</directory>

                <targetPath>libs</targetPath>

                <includes>

                    <include>**/*.jar</include>

                </includes>

            </resource>

        </resources>

    </build>



</project>



application.yml


# 配置端口号

server:

  port: 8084

# 配置Dubbo

dubbo:

  application:

    name: UserServiceProvider

  registry:

    address: zookeeper://127.0.0.1:2181

  protocol:

    name: dubbo

    port: 20881

  monitor:

    protocol: registry

  consumer:

    timeout: 2000



UserServiceImpl




**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/bd946bfe8bf1604d6506443238535ae6.jpeg)
![img](https://img-blog.csdnimg.cn/img_convert/9cd20c95e2ec06073cb1b8367bfef1c8.png)
![img](https://img-blog.csdnimg.cn/img_convert/8c6baf47afc482ffacf5937f8317e2d5.png)
![img](https://img-blog.csdnimg.cn/img_convert/e4a9a08038c3165d9b2c6b012b185f00.png)
![img](https://img-blog.csdnimg.cn/img_convert/fa51dc9619754af905891dc890b040b2.png)
![img](https://img-blog.csdnimg.cn/img_convert/3bac216da24e2735cf2023f9151dbf1d.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)**
![img](https://img-blog.csdnimg.cn/img_convert/bc39d7565c5f367cad2831d7842e6c51.jpeg)



# 总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

![面试了阿里,滴滴,网易,蚂蚁,最终有幸去了网易【面试题分享】](https://img-blog.csdnimg.cn/img_convert/71fe92acb3072a303fe80781cdf42af3.webp?x-oss-process=image/format,png)



[**一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)

**AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**

合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)**
[外链图片转存中...(img-p6h1tyGe-1712182802931)]



# 总结

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。

最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。

[外链图片转存中...(img-VXMY51I8-1712182802931)]



[**一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!**](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)

**AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值