【微服务知识】开源RPC框架Dubbo入门介绍

server/2024/11/14 21:13:47/

文章目录

    • Dubbo概述
      • 什么是Dubbo?
      • Dubbo的主要功能
      • Dubbo的底层实现
      • Dubbo与传统OpenFeign的区别
    • Springcloud结合Dubbo使用
      • Spring Cloud集成Dubbo实现RPC功能的详细过程
        • 1. 项目结构准备
        • 2. API接口定义
        • 3. 提供者服务配置
        • 4. 提供者服务实现
        • 5. 消费者服务配置
        • 6. 消费者服务使用`@Reference`调用远程服务
        • 7. 测试
      • Dubbo与传统OpenFeign的区别
    • 其他

Dubbo概述

什么是Dubbo?

Dubbo是一个开源的、基于Java的高性能RPC(远程过程调用)框架,最初由阿里巴巴开发,现已成为Apache顶级项目。Dubbo主要用于构建微服务架构中的分布式服务治理系统。它通过高效的远程调用、服务治理、负载均衡、服务发现等功能,帮助开发者简化分布式系统的开发和管理。

Dubbo的主要功能

  1. 远程服务调用(RPC):Dubbo提供高效的远程服务调用能力,允许服务消费者像调用本地方法一样调用远程服务。
  2. 服务注册与发现:服务提供者在启动时向注册中心注册自己提供的服务,服务消费者在启动时向注册中心订阅自己所需的服务。
  3. 负载均衡:Dubbo支持多种负载均衡策略,如随机、轮询、最少活跃调用数等,以实现请求在多个服务提供者之间的合理分配。
  4. 服务容错:Dubbo提供服务Mock数据,重试次数、超时机制等服务容错能力。
  5. 服务治理:Dubbo提供服务治理功能,包括动态路由、服务分组、权重调整、限流和熔断等。
  6. 动态配置与扩展:Dubbo支持动态配置和扩展机制,允许在运行时调整服务参数,而无需重启服务。
  7. 监控与管理:Dubbo提供了监控中心和管理中心,可以监控服务的调用情况,包括调用成功率、失败率、平均响应时间等指标。

Dubbo的底层实现

Dubbo的底层实现涉及以下几个关键技术点:

  1. 序列化与反序列化:Dubbo支持多种序列化协议,如Hessian、Java自带序列化、Protobuf等,用于将对象转换为字节流和从字节流恢复对象。
  2. 网络传输:Dubbo支持多种传输协议,如Dubbo协议(基于TCP的私有协议)和HTTP等。数据在网络间传输前会经过序列化和压缩,到达服务端后反序列化。
  3. 心跳检测与连接管理:Dubbo维护服务提供者与消费者的长连接,定期发送心跳包检测链路活性,及时发现并处理异常连接。
  4. 服务执行:服务提供者接收到请求后,根据调用信息找到对应的服务实现,执行方法并获取结果。

Dubbo与传统OpenFeign的区别

  1. 通信协议:Dubbo基于TCP进行数据传输,而OpenFeign基于HTTP进行数据传输。TCP在网络模型中更底层,数据传输相对更加稳定。
  2. 框架定位:Dubbo是一个相对独立的RPC框架,提供了完整的服务治理解决方案。OpenFeign是Spring Cloud生态中的一部分,更适用于构建轻量级的微服务
  3. 易用性:OpenFeign的使用非常简单,只需在接口上添加注解即可完成服务的暴露与调用。Dubbo虽然支持多种协议,但是需要显式地定义接口和实现类,配置各种参数。
  4. 集成性:由于OpenFeign与Spring Cloud的紧密集成,在使用OpenFeign时可以方便地利用Spring Cloud提供的各种功能,如熔断、限流等。Dubbo则需要额外的集成工作。
  5. 性能需求:在处理大量并发请求时,Dubbo的稳定性表现更优秀。而在某些场景下,OpenFeign可能具有更好的性能表现。

总结来说,Dubbo和OpenFeign各有优势,选择哪个框架取决于项目的具体需求、技术栈和性能要求。

Springcloud结合Dubbo使用

Spring Cloud集成Dubbo实现RPC功能的详细过程

1. 项目结构准备

通常,我们会创建一个父工程,包含一个提供者服务模块、一个消费者服务模块和一个公共API模块。例如:

spring-cloud-alibaba
├── springcloudalibaba-dubbo-api
├── springcloudalibaba-dubbo-consumer-1080
└── springcloudalibaba-dubbo-server-1070
  • springcloudalibaba-dubbo-api:公共API接口定义模块。
  • springcloudalibaba-dubbo-consumer-1080:消费者服务模块。
  • springcloudalibaba-dubbo-server-1070:提供者服务模块。
2. API接口定义

springcloudalibaba-dubbo-api模块中定义服务接口,例如:

public interface UserService {String getUserInfo(Long id);
}

这个接口将被提供者和消费者共同使用,因此两者都需要依赖这个模块。

3. 提供者服务配置

在提供者服务模块中,导入必要的依赖,并配置Dubbo和Nacos的相关参数:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置application.yml

spring:application:name: dubbo-providercloud:nacos:discovery:server-addr: 192.168.25.131:8848
dubbo:scan:base-packages: com.train.dubbo.provider.serviceprotocol:name: dubboport: -1registry:address: spring-cloud://192.168.25.131:8848
server:port: 8010
  • dubbo.scan.base-packages:指定Dubbo服务实现类的扫描包。
  • dubbo.protocol:配置Dubbo协议。
  • dubbo.registry.address:配置注册中心地址,使用Spring Cloud的注册中心。
4. 提供者服务实现

在提供者服务模块中实现接口,并使用@Service注解标注:

@DubboService(version = "1.0.0")
public class UserServiceImpl implements UserService {@Overridepublic String getUserInfo(Long id) {return "User Info: " + id;}
}
  • @DubboService:标注服务实现类,使其成为Dubbo服务。
5. 消费者服务配置

在消费者服务模块中,同样导入必要的依赖,并配置Dubbo和Nacos的相关参数。

6. 消费者服务使用@Reference调用远程服务

在消费者服务模块中,使用@Reference注解注入远程服务:

@RestController
public class UserController {@Reference(version = "1.0.0")private UserService userService;@GetMapping("/userinfo/{id}")public String getUserInfo(@PathVariable Long id) {return userService.getUserInfo(id);}
}
  • @Reference:用于注入远程服务的代理对象。
7. 测试

启动Nacos注册中心、提供者服务和消费者服务,然后通过访问消费者服务的接口来测试RPC调用是否成功。

Dubbo与传统OpenFeign的区别

  1. 通信协议

    • Dubbo基于TCP协议,适合高并发场景,性能更优。
    • OpenFeign基于HTTP协议,易于集成和使用,但性能相对较低。
  2. 框架定位

    • Dubbo是一个成熟的RPC框架,专注于服务治理和通信。
    • OpenFeign是Spring Cloud生态中的一个声明式Web服务客户端,更适用于构建微服务
  3. 易用性

    • OpenFeign使用简单,通过注解即可完成服务的暴露与调用。
    • Dubbo需要定义接口和实现类,配置较为复杂。
  4. 集成性

    • OpenFeign与Spring Cloud集成度高,可以方便地使用Spring Cloud的其他组件。
    • Dubbo需要额外的集成工作,但提供了更丰富的服务治理功能。
  5. 性能需求

    • Dubbo在处理大量并发请求时表现更优秀。
    • OpenFeign在某些场景下可能具有更好的性能表现,尤其是在HTTP API调用频繁的场景。

通过上述步骤和区别,可以更好地理解如何在Spring Cloud中集成Dubbo来实现RPC功能,以及Dubbo与传统OpenFeign的不同之处。

其他

Dubbo是阿里开源的RPC框架, 有详细的中文文档。如果需要更深入的了解, 可以移步Dubbo官网。


http://www.ppmy.cn/server/141304.html

相关文章

五、Java并发 Java Google Guava 实现

Guava 是托管在 Github.com 上的流行的 Google 开源的 Java 线程池库。 Guava 包含了许多有用的并发类&#xff0c;同时还包含了几个方便的 ExecutorService 实现&#xff0c;但这些实现类都无法通过直接实例化或子类化来创建实例。取而代之的是提供了 MoreExecutors 助手类来…

滑动变阻器有哪些分类?

滑动变阻器是一种可以改变电阻值的电子元件&#xff0c;广泛应用于各种电子设备中。根据其结构和工作原理的不同&#xff0c;滑动变阻器可以分为以下几类&#xff1a; 1. 线性变阻器&#xff1a;线性变阻器的电阻值与滑动触点在固定电阻体上的位置成正比。当滑动触点向一个方向…

【爬虫分享】

爬虫分享 1、爬虫科普 视频发送于2024-10-27 14 _50.mp4 全屏预览下载附件 所以 爬虫 其实是非常 可“刑” 可“铐” 的。 2、逆向方法 算法还原 补环境 无头浏览器&#xff08;自动化&#xff09; rpc 参数生成速度&#xff1a;算法还原 > 补环境 > rpc > 无头…

Node.js GET/POST请求、WEB模块使用介绍 (基础介绍 八)

GET/POST请求 在很多场景中&#xff0c;我们的服务器都需要跟用户的浏览器打交道&#xff0c;如表单提交。 表单提交到服务器一般都使用 GET/POST 请求。 本章节我们将为大家介绍 Node.js GET/POST请求。 获取GET请求内容 由于GET请求直接被嵌入在路径中&#xff0c;URL是…

吴恩达Prompt Engineering(2/9): Guidelines for Prompting

目录 Principals of Prompting Principle 1 Tactic 1: Tactic 2: Ask for structured output Tactic 3: Check whether conditions are satisfied / Check assumptions required to do the task Tactic 4: Few-Shot prompting, Give successful examples of completing tas…

人脸识别技术:从算法到深度学习的全面解析

一、人脸识别技术综述 人脸识别技术作为一种重要的生物识别技术&#xff0c;在当今社会中具有举足轻重的地位。它广泛应用于各个领域&#xff0c;如金融领域的实名认证、安保领域的门禁系统、通行领域的火车站和地铁站检票、泛娱乐领域的美颜相机和短视频特效处理、公安和司法…

【LeetCode】【算法】11. 盛最多水的容器

LeetCode 11. 盛水最多的容器 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 思…

abap 可配置通用报表字段级日志监控

文章目录 1.功能需求描述1.1 功能1.2 效果展示2.数据库表解释2.1 表介绍3.数据库表及字段3.1.应用日志数据库抬头表:ZLOG_TAB_H3.2.应用日志数据库明细表:ZLOG_TAB_P3.3.应用日志维护字段配置表:ZLOG_TAB_F4.日志封装类5.代码6.调用方式代码7.调用案例程序demo1.功能需求描述 …