图片和内容总结来自:Dubbo 介绍 | Apache Dubbo
简单介绍
Dubbo是一款高性能、轻量级的Java RPC框架。它可以用于构建分布式服务架构,简化不同服务之间的远程调用过程。Dubbo支持多种协议和序列化方式,可以轻松地与Spring Boot进行集成。Dubbo提供了服务治理、负载均衡、容错、路由、降级等丰富的特性,可以帮助我们构建健壮的分布式系统。
在使用Dubbo时,我们可以将服务提供者注册到注册中心,消费者通过注册中心查找到服务提供者的地址,然后进行远程调用。Dubbo提供了多种负载均衡策略,例如随机、轮询、一致性哈希等,可以根据实际场景进行选择。此外,Dubbo还支持容错机制,例如超时、失败重试、熔断等,可以提高系统的可靠性和稳定性。
工作原理
服务发现包含提供者、消费者和注册中心三个参与角色,其中,Dubbo 提供者实例注册 URL 地址到注册中心,注册中心负责对数据进行聚合,Dubbo 消费者从注册中心读取地址列表并订阅变更,每当地址列表发生变化,注册中心将最新的列表通知到所有订阅的消费者实例。
Dubbo 使用 JDK 动态代理或者字节码增强技术,生成一个代理类,该代理类实现了本地接口,具有本地接口的所有方法。在调用本地接口方法时,会通过代理类的 invoke 方法将请求转发到远程服务提供者上,服务提供方接收到请求后,会根据请求中的服务接口名和方法名,找到对应的实现类和方法,并将请求消息反序列化成参数列表,最终调用服务实现类的方法,并将执行结果序列化成响应消息返回给客户端。
简单使用
-
引入依赖
配置Dubbo相关依赖:在
pom.xml
文件中添加Dubbo相关依赖,例如dubbo-spring-boot-starter
、dubbo
等。<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.properties
或application.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.properties
或application.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/