Dubbo 常见注解详解

Dubbo 常见注解详解

Dubbo 提供了多个核心注解用于服务提供者和消费者的配置,以下是主要注解的详细说明:

一、服务提供者相关注解

1. @DubboService(服务提供者注解)

作用:标记一个类为 Dubbo 服务提供者

位置:标注在实现类上

常用参数:

@DubboService(

interfaceClass = UserService.class, // 指定接口类(可选,默认自动推断)

version = "1.0.0", // 服务版本号

group = "prod", // 服务分组

protocol = "dubbo", // 协议类型(默认dubbo)

port = 20880 // 监听端口(默认随机)

)

public class UserServiceImpl implements UserService {

// 实现方法...

}

特点:

替代旧版的 @Service 注解(避免与 Spring 的 @Service 冲突)支持多协议暴露(如同时暴露 Dubbo 和 REST 协议)

二、服务消费者相关注解

2. @DubboReference(服务引用注解)

作用:在消费者端引用远程 Dubbo 服务

位置:标注在接口类型的成员变量上

常用参数:

@DubboReference(

version = "1.0.0", // 指定服务版本

group = "prod", // 指定服务分组

timeout = 3000, // 调用超时时间(毫秒)

retries = 1, // 重试次数(总共尝试 retries+1 次)

cluster = "failover" // 集群容错策略

)

private UserService userService;

特点:

替代旧版的 @Reference 注解支持动态配置(可通过 @DubboReference 注解或全局配置覆盖)

三、配置相关注解

3. @DubboConfiguration(Dubbo 配置类注解)

作用:标记一个类为 Dubbo 的配置类

位置:标注在配置类上(类似 Spring 的 @Configuration)

示例:

@DubboConfiguration

public class DubboConfig {

// 可在此类中定义 Dubbo 相关 Bean

}

特点:

用于组织 Dubbo 相关的配置(如自定义 ApplicationConfig、RegistryConfig 等)替代旧版的 @DubboComponentScan(新版已集成到 Spring Boot 自动配置)

四、其他重要注解

4. @DubboFilter(过滤器注解)

作用:自定义 Dubbo 的过滤器(拦截器)

位置:标注在过滤器实现类上

示例:

@DubboFilter

public class MyFilter implements Filter {

@Override

public Result invoke(Invoker invoker, Invocation invocation) throws RpcException {

// 前置处理...

Result result = invoker.invoke(invocation);

// 后置处理...

return result;

}

}

特点:

用于实现日志、监控、限流等横切逻辑替代旧版的 @Activate 注解(新版通过 @DubboFilter + @Activate 组合)

5. @Activate(激活条件注解)

作用:控制过滤器的激活条件

位置:标注在过滤器类上(与 @DubboFilter 配合使用)

示例:

@DubboFilter

@Activate(group = {"provider", "consumer"}) // 在 Provider 和 Consumer 端都激活

public class MyFilter implements Filter {

// ...

}

参数:

group:指定生效的端(provider/consumer/all)value:指定激活条件(如 url 包含特定参数)

五、新旧版本注解对比

注解新版(Dubbo 2.7+)旧版(Dubbo 2.6及之前)说明服务提供者@DubboService@Service新版避免与 Spring 冲突服务消费者@DubboReference@Reference新版功能更完善配置类@DubboConfiguration无直接替代新版整合到 Spring Boot过滤器@DubboFilter + @Activate@Activate新版更清晰

六、最佳实践建议

统一使用新版注解:

新项目必须使用 @DubboService 和 @DubboReference旧项目升级时逐步替换

合理配置参数:

生产环境建议:

@DubboReference 设置 check = false(避免启动依赖)合理设置 timeout 和 retries

测试环境可以设置 check = true

结合 Spring Boot 自动配置:

新版 Dubbo 已深度集成 Spring Boot,大部分配置可通过 application.yml 完成注解主要用于特殊场景(如自定义过滤器)

七、完整示例

服务提供者端:

@DubboService(version = "1.0.0")

public class UserServiceImpl implements UserService {

@Override

public String getUserInfo(String userId) {

return "User-" + userId;

}

}

服务消费者端:

@Service

public class OrderService {

@DubboReference(version = "1.0.0", timeout = 3000)

private UserService userService;

public void processOrder() {

String userInfo = userService.getUserInfo("123");

System.out.println(userInfo);

}

}

⚠️ 注意:新版 Dubbo 的注解设计更清晰,与 Spring 生态集成更好,建议新项目直接使用新版注解体系。

优直播-世俱杯2025年比赛时间冲突提醒及调整方案
厄怎么读