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

文章目录

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模块中定义服务接口,例如:

java 复制代码
public interface UserService {
    String getUserInfo(Long id);
}

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

3. 提供者服务配置

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

xml 复制代码
<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

yaml 复制代码
spring:
  application:
    name: dubbo-provider
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.25.131:8848
dubbo:
  scan:
    base-packages: com.train.dubbo.provider.service
  protocol:
    name: dubbo
    port: -1
  registry:
    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注解标注:

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

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

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

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

java 复制代码
@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官网

相关推荐
时光追逐者10 分钟前
.NET 9 中 LINQ 新增功能实操
开发语言·开源·c#·.net·.netcore·linq·微软技术
问窗25 分钟前
微服务中Spring boot的包扫描范围
java·spring boot·微服务
聂 可 以2 小时前
IDEA一键启动多个微服务
java·微服务·intellij-idea
檀越剑指大厂3 小时前
Linux本地部署开源项目OpenHands基于AI的软件开发代理平台及公网访问
linux·人工智能·开源
晴子呀12 小时前
微服务系列概览
微服务·云原生·架构
胜天半子_王二_王半仙15 小时前
c++源码阅读__ThreadPool__正文阅读
开发语言·c++·开源
FIT2CLOUD飞致云17 小时前
案例研究|阿特斯的JumpServer分布式部署和多组织管理实践
运维·开源·堡垒机·jumpserver
硬汉嵌入式19 小时前
《安富莱嵌入式周报》第344期:开源手表一年的误差不到1秒,开源32路IMU传感器矩阵,STM32L4驱动1080p显示屏,英飞凌推出USB 20Gbps单片机
单片机·矩阵·开源
天草二十六_简村人20 小时前
Java语言编程,通过阿里云mongo数据库监控实现数据库的连接池优化
java·jvm·数据库·mongodb·阿里云·微服务·云计算
编程广角镜20 小时前
三十一、构建完善微服务——API 网关
运维·网络·微服务