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

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

图片和内容总结来自: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/

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值