对dubbo的一些理解和简单使用记录

本文介绍了Dubbo,一个高性能的JavaRPC框架,详细讲解了其服务提供者、消费者、注册中心的工作原理,以及如何在SpringBoot中集成和使用。同时对比了RPC框架与HTTP在异构系统中的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图片和内容总结来自:Dubbo 介绍 | Apache Dubbo

简单介绍

Dubbo是一款高性能、轻量级的Java RPC框架。它可以用于构建分布式服务架构,简化不同服务之间的远程调用过程。Dubbo支持多种协议和序列化方式,可以轻松地与Spring Boot进行集成。Dubbo提供了服务治理、负载均衡、容错、路由、降级等丰富的特性,可以帮助我们构建健壮的分布式系统。

在使用Dubbo时,我们可以将服务提供者注册到注册中心,消费者通过注册中心查找到服务提供者的地址,然后进行远程调用。Dubbo提供了多种负载均衡策略,例如随机、轮询、一致性哈希等,可以根据实际场景进行选择。此外,Dubbo还支持容错机制,例如超时、失败重试、熔断等,可以提高系统的可靠性和稳定性。

工作原理

service-discovery

服务发现包含提供者、消费者和注册中心三个参与角色,其中,Dubbo 提供者实例注册 URL 地址到注册中心,注册中心负责对数据进行聚合,Dubbo 消费者从注册中心读取地址列表并订阅变更,每当地址列表发生变化,注册中心将最新的列表通知到所有订阅的消费者实例。

Dubbo 使用 JDK 动态代理或者字节码增强技术,生成一个代理类,该代理类实现了本地接口,具有本地接口的所有方法。在调用本地接口方法时,会通过代理类的 invoke 方法将请求转发到远程服务提供者上,服务提供方接收到请求后,会根据请求中的服务接口名和方法名,找到对应的实现类和方法,并将请求消息反序列化成参数列表,最终调用服务实现类的方法,并将执行结果序列化成响应消息返回给客户端。

简单使用
  • 引入依赖

    配置Dubbo相关依赖:在pom.xml文件中添加Dubbo相关依赖,例如dubbo-spring-boot-starterdubbo等。

      <dependency>
      		<groupId>org.apache.dubbo</groupId>
      		<artifactId>dubbo-spring-boot-starter</artifactId>
      </dependency>
    	
    	<dependency>
      		<groupId>org.apache.dubbo</groupId>
      		<artifactId>dubbo</artifactId>
      		<version>${dubbo.version}</version>
      </dependency>
    
  • 服务提供者

    public interface ProvideService {
        String test(String text);
    }
    
    //实现Dubbo服务接口:编写Dubbo服务接口的实现类
    @DubboService
    public class ProvideServiceImpl implements ProvideService {
        public String test(String text) {
             System.out.println(text);
          		return text;
        }
    }
    

    application.propertiesapplication.yml中配置Dubbo服务提供者信息和注册中心地址和协议

    # Dubbo服务提供者配置
    dubbo.application.name=dubbo-provide
    dubbo.registry.protocol=zookeeper
    dubbo.protocol.name=dubbo
    dubbo.protocol.port=20880
    # Dubbo注册中心配置
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    

    打成jar包发不到maven仓库并启动服务

  • 服务消费者

    引入包含ProvideService服务的依赖

    @Component
    public class ConsumerService {
        @DubboReference
        private ProvideService provideService;
      
       public String test(String text) {
             return provideService.test(text)
        }
    }
    

    application.propertiesapplication.yml中配置Dubbo注册中心地址和协议

    # Dubbo注册中心配置
    dubbo.registry.protocol=zookeeper
    dubbo.registry.address=zookeeper://127.0.0.1:2181
    
一些问题

为什么使用rpc框架,而不是用http?

  • 在异构系统(跨语言和跨平台),HTTP具有更好的兼容性,因为HTTP是一种通用的协议,几乎所有的编程语言和操作系统都支持HTTP协议,因为Dubbo支持更严格的通信协议和类型约束,而不是所有的编程语言和操作系统都支持相同的RPC协议。

  • RPC适合用在企业内部,要求使用同一套注册中心进行服务治理,如果是跨组织,或者跨公司,这种情况只能用更加通用的HTTP进行通信。

  • Dubbo在并发连接数较高时表现更好,因为Dubbo使用长连接和TCP协议,而HTTP协议每次请求都要建立连接,在每次连接的过程中需要额外的时间开销和数据传输量。但是,在低并发量和小数据量的情况下,HTTP的开销相对较小。

rpc具有以下优点:

  • 性能好:RPC在传输效率上通常比HTTP更高,此外,RPC可以使用更紧凑的数据格式,如Protocol Buffers和Thrift,可以更有效地利用网络带宽和存储空间。

  • 安全性:目前,Dubbo等RPC框架主要应用在企业内部之间的系统调用,而内部系统之间调用的话安全性就更有保障一些。

  • 调用简单:RCP可以帮我们像调用本地方法一样调用远程代码,而HTTP调用需要拼接Body、Header等等,过于复杂。

更多博客文章尽在:https://cason.work/
自我整理的编程工具集合:https://tool.cason.work/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值