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 生态集成更好,建议新项目直接使用新版注解体系。