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框架,实现远程调用。

三个主要功能:

  1. 面向接口的远程调用;
  2. 智能容错和负载均衡。
  3. 服务注册和发现

第二章 Dubbo框架实现RPC

2.1 第一个服务提供者

使用直连方式,访问提供者。

  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

  1. 解压缩 apache-zookeeper-3.5.5-bin.tar.gz

  2. 修改zookeeper配置文件. zookeeper安装目录/conf/zoo_sample.cfg

    拷贝zoo_sample.cfg ,改名为 zoo.cfg

  3. 修改zoo.cfg文件的内容

dataDir=目录,自定义目录,保存zookeeper收到的数据。 目录不要有空格,中文

admin.serverPort=自定义的端口号, 默认是8080, 改为 8888

  1. 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>
  1. 提供和消费者的配置文件者,提供zookeeper的地址信息
<dubbo:registry address="zookeeper的ip和端口" />

访问zookeeper:

1)可以zkCli.cmd 客户端程序, 使用 ls 目录

2) 使用图形界面工具。 ZooInspector.zip

​ java -jar zookeeper-dev-ZooInspector.jar

3.5 使用Nacos

地址:https://nacos.io

下载地址: 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步骤:

  1. 创建类实现org.apache.dubbo.rpc.Filter接口, 实现invoke()

  2. 配置自定义Filter。

    1)在 resources 下创建 META-INF/dubbo 目录

    2)创建文本文件,名称org.apache.dubbo.rpc.Filter

    3)在文件中,说明自定义的Filter类信息

    ​ 自定义过滤器对象名称=自定义过滤器类的全限定名称

  3. 指定提供者使用某个Filter对象

    <dubbo:service interface="com.bjpowernode.service.HelloService" filter="filter自定义名称"/>
    
  4. 消费者调用提供者, 先执行filter

第五章: 管理控制台(Dubbo Admin)

5.1 简介

管理控制台:就是一个web应用, 是dubbo服务的管理程序。 配置提供者,消费者的一些参数, 提供访问控制的处理。

管理控制台:是dubbo项目组写好的程序。 我们需要编译安装这个程序就可以。 前端使用的vue框架,后端是SpringBoot。

5.2 下载管理控制台源代码

下载源代码

https://github.com/apache/dubbo-admin

使用步骤:

  1. 下载代码: git clone https://github.com/apache/dubbo-admin.git

  2. dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址

  3. 构建

    • mvn clean package
  4. 启动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

使用步骤:

  1. 下载代码: git clone https://github.com/apache/dubbo-admin.git

  2. dubbo-admin-server/src/main/resources/application.properties中指定注册中心地址

  3. 构建

    • mvn clean package
  4. 启动cd dubbo-admin-distribution/target; java -jar dubbo-admin-0.1.jar

  5. 访问 http://localhost:8080`

posted @   岛上码仔  阅读(266)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示