Dubbo入门到精通学习笔记(动力节点王鹤)
Dubbo学习笔记
- 这篇笔记的学习视频来自b站动力节点
https://space.bilibili.com/76542346/video
第一章 初识 Dubbo
1.1 架构
单体结构
垂直结构
分布式结构
流动计算结构
1.2 进程间通信
进程:一个进程就是一个应用。
进程间通信: 两个或更多的应用之间的调用。
实现进程间通信: 1) Servlet或Controller(1需要提供每个接口的url地址,2提供参数说明,3.参数不清楚类型(String)。4. http协议)
2) RPC (Remote Procedure Call) : 远程过程调用。实现分布式中的服务之间调用。
RPC是远程通信的一种技术, 不是规范。 也可以叫做RPC协议。通过PRC简化进程间通信。
3)RPC调用
client(消费者:要使用提供者功能(方法提供))
server(提供者,提供方法的执行实现)
client---stub助手(序列化/反序列化)---网络----stub助手(反序列化/序列化)---提供者方法的实现
4)PRC能做什么
PRC主要就是做分布式开发,实现远程调用, 调用远程的方法,就像调用自己的方法一样
1.3 Dubbo简介
Dubbo: 是一个RPC框架,实现远程调用。
三个主要功能:
- 面向接口的远程调用;
- 智能容错和负载均衡。
- 服务注册和发现
第二章 Dubbo框架实现RPC
2.1 第一个服务提供者
使用直连方式,访问提供者。
- 依赖:pom.xml
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.8</version>
</dependency>
2 ) 创建一个数据类,表示订单的信息
Order: 有id, goodsName ,price , amount
3) 创建服务提供者接口 OrderService
Order createOrder(Integer userId, String goodsName, Float price, Integer amount)
4)暴露服务,使用dubbo框架的功能。
把服务暴露出去,消费者才能调用。 暴露的就是接口。
需要在spring的配置文件中声明暴露服务
<!--声明dubbo的服务名称,必须的
name:服务名称,推荐使用项目名称,这个name的值最后是唯一的。
-->
<dubbo:application name="01-orderservce-provider" />
<!--声明使用的协议和端口:可选-->
<dubbo:protocol name="dubbo" port="20880" />
<!--声明暴露的服务
interface:要暴露的接口的全限定名称
ref:此接口的实现类对象的id
registry:是否使用注册中心, 直连项目不使用注册中心, 赋值N/A
-->
<dubbo:service interface="com.bjpowernode.service.OrderService"
ref="orderServiceBean"
registry="N/A" />
<!--声明Bean-->
<bean id="orderServiceBean" class="com.bjpowernode.service.impl.OrderServiceImpl" />
5)把提供者安装到maven仓库中
maven install
2.2 第一个消费者
创建maven项目
1) pom.xml
加入dubbo依赖
<!--加入dubbo的依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.8</version>
</dependency>
<!--提供者坐标-->
<dependency>
<groupId>com.bjpowernode</groupId>
<artifactId>01-orderservce-provider</artifactId>
<version>1.0.0</version>
</dependency>
2)声明要使用的dubbo服务提供者。 说明要使用的接口
在spring的配置文件者, 声明要使用的接口
2.3 Dubbo常用标签
1) 公用标签:在提供者和消费者中都使用的。
<dubbo:application name="" />
<dubbo:registry />
2)提供者标签
<dubbo:service interface="接口" />
3)消费者标签
<dubbo:reference interface="接口">
2.4 Dubbo注解
@EnableDubbo , @EnableDubboConfig , @DubboComponentScan,
@DubboService,@DubboReference
@DubboService
@DubboService == <dubbo:service> 暴露服务的
属性:interface:接口的.class
位置:放在接口的实现类的上面
@DubboReference
@DubboReference == <dubbo:reference> 引用远程服务
位置:可以放在属性(成员变量)定义上面,可以方法上面
Dubbo组件扫描器:扫描的是Dubbo的注解(@DubboService,@DubboReference)
<dubbo:annotation package="dubbo 注解所在的包名" />
第三章 注册中心
3.1 注册中心作用
1) 服务管理, 发现服务,注册服务
2) 实现故障处理
3)实现消费者和提供者的解耦合。
3.2 注册中心
Nacos 注册中心
Zookeeper 注册中心(推荐)
3.3 Zookeeper
地址:https://zookeeper.apache.org , 下载zookeeper安装文件
需求: 使用zookeeper ,先有java环境。
安装zookeeper
-
解压缩 apache-zookeeper-3.5.5-bin.tar.gz
-
修改zookeeper配置文件. zookeeper安装目录/conf/zoo_sample.cfg
拷贝zoo_sample.cfg ,改名为 zoo.cfg
-
修改zoo.cfg文件的内容
dataDir=目录,自定义目录,保存zookeeper收到的数据。 目录不要有空格,中文
admin.serverPort=自定义的端口号, 默认是8080, 改为 8888
- clientPort=2181 : dubbo程序访问zookeeper的默认端口号 ,可以修改。
运行zookeeper
进入到zookeeper安装目录/bin.
zkServer.cmd: 服务端程序
zkCli.cmd 客户端程序
3.4 dubbo项目者使用Zookeeper
1 ) 在提供者和消费者中都需要使用 zookeeper client 。 使用client 是zookeeper数据交换
<!--zookeeper 客户端-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
- 提供和消费者的配置文件者,提供zookeeper的地址信息
<dubbo:registry address="zookeeper的ip和端口" />
访问zookeeper:
1)可以zkCli.cmd 客户端程序, 使用 ls 目录
2) 使用图形界面工具。 ZooInspector.zip
java -jar zookeeper-dev-ZooInspector.jar
3.5 使用Nacos
下载地址: https://github.com/alibaba/nacos/releases
3.6 使用Nacos的提供者。
1)nacos依赖
<!-- Dubbo Nacos registry dependency -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.8</version>
</dependency>
<!-- Keep latest Nacos client version -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.3.1</version>
</dependency>
<!-- Alibaba Spring Context extension -->
<dependency>
<groupId>com.alibaba.spring</groupId>
<artifactId>spring-context-support</artifactId>
<version>1.0.8</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.54.Final</version>
</dependency>
<!-- Dubbo dependency -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.8</version>
</dependency>
2)在配置文件中,声明nacos注册中心
<dubbo:registory address="nacos://localhost:8848" />
第四章 匹配服务
默认使用接口名称作为服务匹配,找到服务提供者。
dubbo使用接口, version, group 三个值唯一匹配服务。 当没有version或者group使用接口名称作为唯一匹配条件
version:表示版本
group:分组
使用version,group区分接口的不同实现。
4.1 version
version:版本。 可以用来区分同一个接口的不同实现。 消费者和提供者必须使用相同的版本,否则调用失败。
提供者
<dubbo:service interface="xxxx.SomeService" version="1.0" />
dubbo使用: xxxx.SomeService:1.0 表示这个唯一的服务提供者
消费者:
<dubbo:reference interface="xxxx.SomeService" version="1.0" />
dubbo调用: xxxx.SomeService:1.0 调用对于的提供者
4.2 group
使用group区分服务的不同实现,接口的不同使用。 消费者和提供者要匹配group名称。
提供者:
<!--暴露服务使用group-->
<dubbo:service interface="com.bjpowernode.service.MenuService"
ref="fileService"
group="file" />
<dubbo:service interface="com.bjpowernode.service.MenuService"
ref="editMenuService"
group="edit" />
消费者:使用指定组
<dubbo:reference interface="com.bjpowernode.service.MenuService"
id="fileMenuService"
group="file" />
使用任意组
<dubbo:reference interface="com.bjpowernode.service.MenuService"
id="fileMenuService"
group="*" />
4.3 Dubbo中的Filter
使用自定义Filter步骤:
-
创建类实现org.apache.dubbo.rpc.Filter接口, 实现invoke()
-
配置自定义Filter。
1)在 resources 下创建 META-INF/dubbo 目录
2)创建文本文件,名称org.apache.dubbo.rpc.Filter
3)在文件中,说明自定义的Filter类信息
自定义过滤器对象名称=自定义过滤器类的全限定名称
-
指定提供者使用某个Filter对象
<dubbo:service interface="com.bjpowernode.service.HelloService" filter="filter自定义名称"/>
-
消费者调用提供者, 先执行filter
第五章: 管理控制台(Dubbo Admin)
5.1 简介
管理控制台:就是一个web应用, 是dubbo服务的管理程序。 配置提供者,消费者的一些参数, 提供访问控制的处理。
管理控制台:是dubbo项目组写好的程序。 我们需要编译安装这个程序就可以。 前端使用的vue框架,后端是SpringBoot。
5.2 下载管理控制台源代码
下载源代码
https://github.com/apache/dubbo-admin
使用步骤:
-
下载代码:
git clone https://github.com/apache/dubbo-admin.git
-
在
dubbo-admin-server/src/main/resources/application.properties
中指定注册中心地址 -
构建
mvn clean package
-
启动
cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar
管理控制台(Dubbo Admin)
5.1 简介
管理控制台:就是一个web应用, 是dubbo服务的管理程序。 配置提供者,消费者的一些参数, 提供访问控制的处理。
管理控制台:是dubbo项目组写好的程序。 我们需要编译安装这个程序就可以。 前端使用的vue框架,后端是SpringBoot。
5.2 下载管理控制台源代码
下载源代码
https://github.com/apache/dubbo-admin
使用步骤:
-
下载代码:
git clone https://github.com/apache/dubbo-admin.git
-
在
dubbo-admin-server/src/main/resources/application.properties
中指定注册中心地址 -
构建
mvn clean package
-
启动
cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar
-
访问 http://localhost:8080`
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)