【微服务知识】开源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官网

相关推荐
LunarCod11 小时前
Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
linux·运维·服务器·ubuntu·docker·开源·sonarqube
zy happy14 小时前
搭建运行若依微服务版本ruoyi-cloud最新教程
java·spring boot·spring cloud·微服务·ruoyi
无心水14 小时前
【程序员AI入门:模型】19.开源模型工程化全攻略:从选型部署到高效集成,LangChain与One-API双剑合璧
人工智能·langchain·开源·ai入门·程序员ai开发入门·程序员的 ai 开发第一课·程序员ai入门
zkmall15 小时前
商业架构 2.0 时代:ZKmall开源商城前瞻性设计如何让 B2B2C 平台领先同行 10 年?
架构·开源
凯雀安全18 小时前
printspoofer的RPC调用接口的简单代码
qt·网络协议·rpc
IT成长史19 小时前
deepseek梳理java高级开发工程师微服务面试题-进阶版
java·spring cloud·微服务
zkmall19 小时前
Java + 鸿蒙双引擎:ZKmall开源商城如何定义下一代B2C商城技术标准?
java·开源·harmonyos
一零贰肆20 小时前
互联网大厂Java面试题:深入解析SpringCloud微服务架构中的服务注册与发现机制
java·微服务·nacos·面试题·springcloud
说私域20 小时前
基于开源链动2+1模式AI智能名片S2B2C商城小程序的低集中度市场运营策略研究
人工智能·小程序·开源·零售
charles_vaez21 小时前
开源模型应用落地-模型上下文协议(MCP)-Resources-资源的使用逻辑
深度学习·语言模型·自然语言处理·开源