Dubbo Triple
TripleRequest
TripleRequest 抽象类定义 Dubbo Triple RPC 请求的基础结构与校验规范
TripleRequest
TripleRequest 是 Dubbo Triple RPC 请求的抽象基类,定义了请求元数据结构与校验规范。所有 Triple 服务的请求参数均应继承该类,实现 validate() 与 getSummary() 抽象方法。
类定义
package com.xlf.utility.triple;
import lombok.experimental.SuperBuilder;
import java.io.Serializable;
// 抽象请求基类,使用 @SuperBuilder 支持子类继承 Builder
@SuperBuilder
public abstract class TripleRequest implements Serializable {
private String ctx;
private Long timestamp;
private String source;
private String version;
public <T extends TripleRequest> T init(String source) { ... }
public abstract boolean validate();
public abstract String getSummary();
}字段说明
字段
类型
抽象方法
validate()
校验请求参数的合法性。由 TripleRequestCheckAspect 在方法执行前自动调用。
// 返回 true 表示校验通过,false 将触发 BusinessException
public abstract boolean validate();getSummary()
返回请求的摘要描述,可用于日志记录与调试输出。
public abstract String getSummary();init() 方法
init() 方法用于初始化请求元数据,并返回当前实例(泛型 T extends TripleRequest)以支持链式调用。其行为与源码保持一致:
timestamp:设置为System.currentTimeMillis()ctx:读取com.xlf.utility.mvc.holder.ContextHolder.getContextId()source:设置为调用方传入值version:固定设置为"1.0.0"
// 初始化请求元数据
UserQueryRequest request = UserQueryRequest.builder()
.userId(10001L)
.build()
.init("order-service");自定义请求类
继承 TripleRequest 并实现两个抽象方法:
import com.xlf.utility.triple.TripleRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;
@Data
@SuperBuilder
@EqualsAndHashCode(callSuper = true)
public class UserQueryRequest extends TripleRequest {
private Long userId;
private String username;
// 实现参数校验逻辑
@Override
public boolean validate() {
return userId != null && userId > 0;
}
@Override
public String getSummary() {
return "查询用户 [userId=" + userId + ", username=" + username + "]";
}
}完整使用示例
import com.xlf.utility.ErrorCode;
import org.apache.dubbo.config.annotation.DubboService;
@DubboService
public class UserTripleServiceImpl implements UserTripleService {
@DubboPersistentContext
@TripleRequestCheck(message = "用户查询参数无效", errorCode = ErrorCode.PARAMETER_INVALID)
@Override
public TripleResponse<UserDTO> queryUser(UserQueryRequest request) {
// 此处 request 已通过 validate() 校验
// ctx 已由 DubboContextAspect 提取并注入上下文
UserDTO user = userService.getById(request.getUserId());
return TripleResult.success(user, "查询成功");
}
}