欢迎访问宙启技术站
智能推送

dubbo的重要知识点总结

发布时间:2023-05-18 02:03:21

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. 线程