dubbo的重要知识点总结
Dubbo是一款高性能、轻量级的分布式服务框架,广泛应用于阿里巴巴等大型企业的服务化架构中。本文将总结Dubbo的重要知识点。
### 一、 Dubbo的架构
- Provider: 服务提供者,负责实现服务接口,并将服务注册到注册中心;
- Consumer: 服务消费者,通过网络调用服务接口;
- Registry: 注册中心,负责服务的注册、发现和管理;
- Monitor: 监控中心,用于统计服务调用次数和调用时间;
- Container: 服务容器,负责启动、停止和销毁服务提供者。
### 二、 Dubbo的配置
Dubbo提供了多种配置方式,包括XML配置、注解配置和API配置等。其中,XML配置方式最为常用,包含了以下几种配置:
- Service: 注册服务提供者的接口、实现类;
- Registry: 注册中心地址、协议和超时时间;
- Protocol: 服务暴露的协议、端口号和线程池等配置;
- Application: 应用名称和负责人等基本信息;
- Provider: 服务提供者的超时时间、重试次数和负载均衡方式;
- Consumer: 服务消费者的超时时间、重试次数和负载均衡方式;
- Monitor: 监控中心地址、协议和端口号等配置。
### 三、 Dubbo的调用方式
Dubbo支持四种调用方式,分别是同步调用、异步调用、单向调用和事件通知调用:
1. 同步调用
同步调用方式是阻塞式的,即调用方发起请求后,需要等待服务提供方返回结果后才能继续执行后续代码。调用方式示例如下:
UserService userService = (UserService) context.getBean("userService");
User user = userService.getUserById(userId);
2. 异步调用
异步调用方式是非阻塞式的,即调用方发起请求后,不用等待服务提供方返回结果,可以继续执行后续代码。当服务提供方返回结果时,会通过回调函数将结果通知给调用方。调用方式示例如下:
AsyncUserService asyncUserService = (AsyncUserService) context.getBean("asyncUserService");
asyncUserService.getUserById(userId, new AsyncResultCallback<User>() {
@Override
public void onResult(User user) {
// 处理返回结果
}
});
3. 单向调用
单向调用方式是只发送请求,不等待响应的方式,适用于对结果不关心的场景。调用方式示例如下:
userService.deleteUser(userId);
4. 事件通知调用
事件通知调用方式是在服务提供者完成某些操作后,向注册中心发布事件,然后订阅该事件的消费者接收到事件通知。调用方式示例如下:
// 服务提供者:发布事件通知
ApplicationEventPublisher publisher = context.getBean(ApplicationEventPublisher.class);
publisher.publishEvent(new UserCreateEvent(user));
// 服务消费者:订阅事件
@EventListener
public void onUserCreate(UserCreateEvent event) {
// 处理事件
}
### 四、 Dubbo的集群容错
Dubbo提供了多种集群容错机制,包括Failover、Failfast、Failsafe、Failback、Forking和Broadcast等。
1. Failover
Failover机制是Dubbo默认的容错机制,即如果某次调用失败,会自动切换到下一台服务提供者进行调用,直到调用成功为止。调用方式示例如下:
<dubbo:service interface="com.xxx.UserService" retries="2" />
其中,retries表示服务提供者最大的重试次数。
2. Failfast
Failfast机制是在某次调用失败后立即返回异常,不进行重试的机制。适用于对性能要求较高、服务提供者可用性较高的场景。调用方式示例如下:
<dubbo:service interface="com.xxx.UserService" cluster="failfast" />
3. Failsafe
Failsafe机制是在某次调用失败后,忽略异常直接返回null或者空集合的机制。适用于对数据准确性要求不高、服务提供者可用性较低的场景。调用方式示例如下:
<dubbo:service interface="com.xxx.UserService" cluster="failsafe" />
4. Failback
Failback机制是在某次调用失败后,异步重试该次调用的机制。适用于对数据准确性要求较高、服务提供者可用性较低的场景。调用方式示例如下:
<dubbo:service interface="com.xxx.UserService" cluster="failback" />
5. Forking
Forking机制是调用多台服务提供者,并返回其中最先响应的结果的机制。适用于对服务提供者可用性要求较高、对结果要求不高的场景。调用方式示例如下:
<dubbo:service interface="com.xxx.UserService" cluster="forking" retries="2" />
其中,retries表示服务提供者最大的重试次数。
6. Broadcast
Broadcast机制是同时调用多个服务提供者,并将所有结果合并后返回的机制。适用于要求所有服务提供者都要执行的场景。调用方式示例如下:
<dubbo:service interface="com.xxx.UserService" cluster="broadcast" />
### 五、 Dubbo的核心概念
1. URL
URL是Dubbo的核心概念之一,用于描述Dubbo的各种参数和协议等信息,形如:dubbo://192.168.0.1:20880/com.xxx.UserService?version=1.0.0&timeout=10000。
2. Invoker
Invoker是Dubbo远程调用的核心组件之一,用于封装通信细节,实现对远程服务的调用。Dubbo默认提供了Javassit和动态代理两种Invoker实现。
3. Filter
Filter是Dubbo的核心概念之一,是Dubbo进行拦截、扩展、过滤的重要组件之一。Dubbo内置了多个Filter实现,包括Provider、Consumer、Protocol和Trace等。
4. Extension
Extension是Dubbo的核心概念之一,用于扩展Dubbo的各种组件,例如Protocol、Registry、Serialization等。Dubbo内置了各种Extension实现,用户也可自定义扩展。
### 六、 Dubbo的生命周期
Dubbo的生命周期包括以下几个阶段:
1. 初始化阶段
在该阶段,Dubbo会读取配置文件、创建对象、初始化组件,并将其加入Spring容器中。
2. 启动阶段
在该阶段,Dubbo会启动容器、启动注册中心、暴露服务或引用服务。
3. 运行阶段
在该阶段,Dubbo会监听服务请求、处理请求、发送响应,并记录日志和监控数据等。同时,Dubbo还会支持服务热更新,即不影响正在运行的服务,动态更新服务的实现代码。
4. 停止阶段
在该阶段,Dubbo会停止容器、停止注册中心、停止提供或消费服务。同时,Dubbo还会释放相关资源、清理缓存、记录日志等。
### 七、 Dubbo的优化
Dubbo的优化主要包括以下几个方面:
1. 线程
