-
服务提供者在启动时,向注册中心注册自己提供的服务
-
服务消费者在启动时,向注册中心订阅自己需要的服务
-
注册中心返回服务提供者地址列表给服务消费者,如果有变更,注册中心将基于长连接推送变更数据给服务消费者
-
服务消费者,从服务提供者地址列表中,基于软负载均衡算法,选一台服务提供者进行调用,如果调用失败,再选另一台调用
-
服务消费者和服务提供者,再内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
============================================================================
RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。
示意图
详细版本
RPC两个核心模块:序列化和通讯
================================================================================
Apache Dubbo |ˈdʌbəʊ| 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。
Dubbo的注册中心
Dubbo的注册中心有很多种,但官方推荐使用Zookeeper,其余有Redis、Multicast、Simple注册中心。
Dubbo网络通信框架
Dubbo 默认使用 Netty 框架,也是推荐的选择,另外内容还集成有Mina、Grizzly。
==================================================================================
顾名思义 zookeeper 就是动物园管理员,他是用来管 hadoop(大象)、Hive(蜜蜂)、pig(小 猪)的管理员, Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper;Zookeeper: 是一个分布式的、开源的程序协调服务,是 hadoop 项目下的一个子项目。他提供的主要功 能包括:配置管理、名字服务、分布式锁、集群管理。
====================================================================================
访问Zookeeper官网下载
下载 压缩包格式的zookeeper
将下载的文件解压缩
从cmd窗口进入Zookeeper文件夹下的bin目录,执行zkServer.cmd启动
如果报错提示 zoo.cfg缺失,那就进入zookeeper的conf文件夹下将zoo_sample.cfg复制一份改名为zoo.cfg即可
再次重启则成功
=================================================================================
从 github打开项目 dubbo-admin
从GitHub爬取项目教程如下:
使用 Git爬取 GitEE、GitLab、GitHub项目的教程
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 环境
教程如下
cmd窗口进入dubbo-admin-ui,执行以下命令下载依赖
npm install
下载完毕后,执行启动命令
npm run dev
启动成功
访问前端生成的本地地址
默认用户名密码均为root
输入即可登录成功
后端的地址必须和前端工程vue.config.js下的target路径一样,否则404!
七、SpringBoot 整合Dubbo + Zookeeper
===================================================================================================
基于SpringBoot项目整合Dubbo + Zookeeper 实现消费者消费服务提供者的服务
消费者为订单模块,传入用户id去查询用户模块的用户信息,实现远程RPC调用服务,分布式调用,而不是单体架构
服务提供者为用户模块,返回用户信息
-
父工程:dubbo-boot
-
公共API(接口及实体类):GmallPublicInterafce
-
服务提供者:UserServiceProvider
-
服务消费者: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、安卓逆向、云计算**