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
完成 - 注解主要用于特殊场景(如自定义过滤器)
- 新版 Dubbo 已深度集成 Spring Boot,大部分配置可通过
七、完整示例
服务提供者端:
@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 生态集成更好,建议新项目直接使用新版注解体系。